题目要求:思路:遍历第一个链表和第二个链表,相同位置的相加设置一个flag来标记相加后大于10的部分,在下一位相加的时候加上flag遍历该值,直到结束的链表。如果此时flag不为0,则将当前未完成链表的第一位加上flagfalg记录加上大于10的部分,直到也遍历完当前链表。如果遍历完成,flag仍然不为0,再增加1个核心代码:遍历两个链表:#将链表12的头部赋值给h1,h2h1=l1h2=l2#新建一个链表保存calculatednumberl3=ListNode()h3=l3#flag标记两个数相加后大于9的部分flag=0#遍历两个链表,h3的当前值为h1+h2减去十位部分,flag保存进位,在操作h1、h2、h3后移动到下一位,同时h1和h2:h3.next=ListNode((h1.val+h2.val+flag)%10)flag=(h1.val+h2.val+flag)//10h1=h1.nexth2=h2.nexth3=h3.next-如果链表1或2还没有遍历过:#原理同上ifh1:whileh1:h3.next=ListNode((h1.val+flag)%10)flag=(h1.val+flag)//10h1=h1.nexth3=h3.next#使用elif,如果h1有未遍历,遍历后h2不再遍历elifh2:whileh2:h3.next=ListNode((h2.val+flag)%10)flag=(h2.val+flag)//10h2=h2.nexth3=h3.next-如果加上最后一位,还需要进位:ifflag==1:h3.next=ListNode(1)完整代码:plus一开始判断l1和l2是否为空,如果l1为空,返回l2,如果l2为空,返回l1#单链表的定义。#classListNode(object):#def__init__(self,x):#self.val=x#self.next=NoneclassSolution(object):defaddTwoNumbers(self,l1,l2):""":typel1:ListNode:typel2:ListNode:rtype:ListNode"""如果l1为无:返回l2如果l2为无:返回l1h1=l1h2=l2l3=ListNode()h3=l3flag=0whileh1andh2:h3.next=ListNode((h1.val+h2.val+flag)%10)flag=(h1.val+h2.val+flag)//10h1=h1.nexth2=h2.nexth3=h3.nextifh1:whileh1:h3.next=ListNode((h1.val+flag)%10)flag=(h1.val+flag)//10h1=h1.nexth3=h3.nextelifh2:whileh2:h3.next=ListNode((h2.val+flag)%10)flag=(h2.val+flag)//10h2=h2.nexth3=h3.next如果flag==1:h3.next=ListNode(1)returnl3.next
