首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

链表-两数相加

问题 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。...,以此向下进行,放入新链表的头部,遇到相加大于10的进1。...下面我们开始进入编程思路,首先声明一个链表 type ListNode struct { Next *ListNode Val int } 我们想到链表相加不太友好,而且考虑到两个链表长度不一样呢...两个三位数相加(999+999 = 1998),最大是4位数,所以新数组的长度永远比原来数组的长度大1就可以,看代码: func sumArray(array1 []int, array2 []int)...从解法一我们得知是从链表头部开始相加,所得结果最后作为新链表的头部,如果大于10,则向上进一位,在创建新链表下一个节点时把进上来的值加上,依次直到两个链表的节点都为空,基于这个我们考虑能不能用递归呢?

70530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    两个链表生成相加链表

    思路一,将链表反转,链条反转的链表从个位数开始相加,然后取余数,不断叠成新的链表。 思路二,将链表的数据取出组合成字符串,然后利用大数相加的方法,取得相加的和,然后根据新的和的字符串生成新的链表。...(但实际上运算量有点过大,没有过测试) 代码示例: public class Solution4 {     public static void main(String[] args) {         ...            ans.append(a);         }         return ans.reverse().toString();     }     /**      * 方案1,采用反转链表的形式...            pre = head;             head = next;         }         return pre;     }     /**      * 打印链表

    55920

    每日三题-两数相加、反转链表、回文链表

    ‍个人主页: 才疏学浅的木子 ‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 ‍♂️ 本文来自专栏: 算法 算法类型:Hot100题 每日三题 两数相加 反转链表 回文链表...两数相加 解法一 使用双指针 每次l1、l2指针都向后移动,但是可能存在一个进位然后保存下来 所以当前值每次都是(l1.val+l2.val+进位)%10,而进位值就是(l1.val+l2.val...s.isEmpty()){ // 比较栈中的值与链表的值是否相等 ListNode t = s.pop(); if(t.val !...= p.val) return false; p = p.next; } return true; } } 解法二 链表反转+比较 与上面链表反转类似不再赘述...解法三 快慢指针 + 链表反转 O(n) 时间 O(1) 空间 与解法二类似,只是只反转后部分链表然后比较 class Solution { public boolean isPalindrome

    18230

    算法篇:链表之两数相加

    题目 1: 两数相加: https://leetcode-cn.com/problems/add-two-numbers/ ?...代码: // 算法: 核心问题是:进位的操作, // 1)不要忘记进位之后的哪一个1; // 2)不要忘记所有位都操作完了之后,最后的哪一个进位1 /** * Definition for singly-linked...代码实现: // 算法:实现方式与题目1一致, // 本题代码相当于对题目1的解法做了一个代码层面的优化 /** * Definition for singly-linked list....题目 3 :两数相加 https://leetcode-cn.com/problems/add-two-numbers-ii/ ?...// 算法: // 核心点在于,链表的低位是数字的高位,只要能够将链表的高低位交换,就变成题目1. // 采用数组顺序性去实现高低位的反转,从数组末尾遍历就可以了。 // 剩下的思路与题目1一致。

    36510

    链表求和相加,并记录进位情况

    你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。...样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null 相加,并记录进位情况 这个没有什么难的,从头开始是个位,然后十位,百位……以此类推,要用一个变量来记录进位情况...,这种相加进位最多进1,然后就是,当一个链表加到头就停止(注意处理进位),然后再处理没有加完的那个链表,处理完之后然后再看有没有进位,有的话放在链表最后,链表也写了很久了,这种操作一定要熟练: 虽然很长...head上 head=head->next; //head向后移动 l1=l1->next; //两个链表向后移动...head上 head=head->next; //head向后移动 l1=l1->next; //两个链表向后移动

    55740

    《剑指offer》第24天:链表相加

    第2题:两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。...如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。...加法肯定是从最低位到最高位进行相加,也就是这里的链表头到链表尾进行相加,所以需要遍历链表。...我们令 l1 和 l2 指向两个链表的头,用一个 tmp 值来存储同一位相加的结果,以及一个新的链表来存储 tmp 的值。...分析完毕,直接上代码,go: //go func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { list := &ListNode{0,

    39710

    【Leetcode -141.环形链表 -2.两数相加

    每次走两步,slow每次走一步,如果有环的话,fast一定能追上slow;如图: fast走两步,slow走一步: fast走两步,slow走一步: 最终fast追上slow,即它们相等的时候; 代码...请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。...[1, 100] 内 0 <= Node.val <= 9 题目数据保证列表表示的数字不含前导零 我们的思路是,将链表逐一相加拿下来,计算两个结点val之和,因为每个结点只能存放0-9的数字,所以每十进一...,用flag来存放这个一,所以两个结点val之和加上flag,再取余才是拿下来放进新链表的val;当两个链表都空了,如果flag中还留着一,那么要再开辟一个结点,val为1,放到新链表的尾部; 如图,第一次相加...: 第二次相加,n1+n2 = 10,需要进一,所以flag在相加完后变成1; 第三次相加: 当两个链表都走完,但是上两个结点相加进10,flag还留了个1,所以要再开辟一个结点,存放1,把它放到链表的尾部

    8510

    golang刷题1-两单链表数据相加

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。...,判断两个链表都是nil的情况则退出循环 2:链表循环过程中处理进位的问题,设置一个临时的进位变量,变量值是在next下加上 3:如果最后循环完了还有进一位的情况需要把最后的进一位的值补充到链表最后 4...,判断两个链表都是nil的情况则退出循环 for l1 !...我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1)O(1) 的时间。 空间复杂度:O(\max(m,n))O(max(m,n))。答案链表的长度最多为较长链表的长度 +1+1。...*/ 运行结果是:807 有同学有兴趣可以拿上面代码去研究一下~~~

    35570
    领券