题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
分析
这题要我们把两个链表表示的数加起来,好处是链表本身是倒序的,所以进位的话直接进到下一位就可以了。
两个链表加起来有一些情况,首先考虑链表等长的情形:
- [1, 2, 3] + [4, 5, 6] = [5, 7, 9],此时不存在进位直接加起来即可
- [6, 2, 3] + [4, 5, 6] = [0, 8 ,9],此时低位进位,但不影响总位数
- [1, 2, 3] + [4, 5, 7] = [5, 7, 0, 1], 这种情况最高位出现了进位导致位数增加了1
而当两个链表链表长度不一样的时候,也同样会出现这三种情况,此时需要将没有遍历完毕的链表直接连到结果中再计算进位即可。
而对于进位的计算,可以选择增加一个carry
变量来记录,也可以选择在相加完毕后重头处理进位。
代码
1 | class Solution: |
执行用时 : 100 ms, 在Add Two Numbers的Python3提交中击败了92.13% 的用户
内存消耗 : 13.1 MB, 在Add Two Numbers的Python3提交中击败了92.11% 的用户