1、题目描述:
2、题解:
思路:
设定哑结点p = pre = ListNode(-1),其后保存两个链表相加的结果,也就是返回pre.next。
用flag保存进位,
先同时移动l1,l2,
每次都是temp = (l1.val + l2.val + flag) % 10,作为该位置的结果(一定要加进位)
p.next = ListNode(temp)
更新flag,flag = (l1.val + l2.val + flag) // 10
移动l1,l2,p
这时候如果l1没有移动到None,就说明l1后面还有值,要添加到p.next后面:
计算该位置的值:temp = (l1.val + flag) % 10 #注意此时没有l2后面没有值,只计算l1即可
更新flag,flag = (l1.val + flag) // 10
移动指针 l1,p
这时候如果l2没有移动到None,就说明l2后面还有值,要添加到p.next后面:
计算该位置的值:temp = (l2.val + flag) % 10 #注意此时没有l1后面没有值,只计算l2即可
更新flag,flag = (l2.val + flag) // 10
移动指针 l2,p
还要判断一下flag是否为1,如果为1,还要加入到pre.next后
返回pre.next
代码如下:
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
flag = 0 #存放进位
p = pre = ListNode(-1)
while l1 and l2:
temp = (l1.val + l2.val + flag) % 10
p.next = ListNode(temp)
flag = (l1.val + l2.val + flag) // 10
l1 = l1.next
l2 = l2.next
p = p.next
while l1:
temp = (l1.val + flag) % 10
p.next = ListNode(temp)
flag = (l1.val + flag)// 10
l1 = l1.next
p = p.next
while l2:
temp = (l2.val + flag) % 10
p.next = ListNode(temp)
flag = (l2.val + flag)// 10
l2 = l2.next
p = p.next
if flag == 1:
p.next = ListNode(flag)
return pre.next
3、复杂度分析:
时间复杂度:O(N)
空间复杂度:O(1)