题目描述:
2->5->1
3->6->1
相加得到5->1->3
要注意的问题:
① 返回的值是要包含第一个val=0的节点的
解决:直接从l1和l2的构造时第一个val=0的节点开始做加法
② 要注意l1和l2长度不一致的情况
解决:取l1和l2节点值的时候要判断是否为空
③ 要注意最后一个节点数值>9的情况
解决:循环要加上商值的判断,如果商值不为0,应继续循环;要给取l1和l2的变量赋初值
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
root=result=ListNode(0)
shang=0
while l1 or l2 or shang:
a=0
b=0
if l1:
a=l1.val
l1=l1.next
if l2:
b=l2.val
l2=l2.next
shang,yushu=divmod(a+b+shang,10)
result.next=ListNode(yushu)
result=result.next
return root.next
if __name__=="__main__":
l1=ListNode(0)
l2=ListNode(0)
a=[5]
b=[5]
t=l1
for item in a:
p=ListNode(item)
t.next=p
t=p
t=l2
for item in b:
p=ListNode(item)
t.next=p
t=p
s=Solution()
r=s.addTwoNumbers(l1,l2)
while r:
print r.val
r=r.next