题目:两个非空链表表示两个非负整数,逆序保存,将两链表表示的数相加,返回一个新的逆序链表
法:两数加法,只是用链表逆序表示,相当于头节点是个位数字,后面依次是十位、百位数等
注意:1)考虑进位,尤其是最后一次的进位,当两个链表都遍历完之后如果还有进位,再在尾部增加一个节点
2)要记得每次移动指针,避免陷入死循环
def addTwoNumbers(self, l1, l2):
if l1==None:return l2
if l2==None:return l1
p,q=l1,l2
res=ListNode(0)
head,carry=res,0
while p!=None or q!=None:
tmp=0
if p:
tmp+=p.val
p=p.next
if q:
tmp+=q.val
q=q.next
tmp+=carry
carry=tmp//10
tmp%=10
head.next=ListNode(tmp)
head=head.next
if carry:
head.next=ListNode(carry)
return res.next
其实代码可以写的稍简洁一点,将进位carry放到一开始的大循环while中去
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
res=ListNode(0)
p,q,tmp=l1,l2,res
carry=0
while p!=None or q!=None or carry!=0:
num=0
if p!=None:
num+=p.val
p=p.next
if q!=None:
num+=q.val
q=q.next
num+=carry
carry=num//10
num%=10
tmp.next=ListNode(num)
tmp=tmp.next
return res.next