leetcode题目:
解题思路:
解决问题的关键是模仿加法的进位
1. 新建一个空链表L3,初始化进位carry为0
2. 从头开始分别遍历输入的两个链表L1,L2,直到有一个链表为空为止
2.1 将L1和L2的元素和carry相加,模10,得商和余数,carry赋值为商
2.2 若L3为空,L3新建节点,赋值为2.1所得余数
2.3 如L3不为空,L3新建下一个节点,赋值为2.1所得余数
3. 经过上述步骤,肯定有一个输入链表为空
3.1 若两个链表都为空,到第4步
3.2 存在一个链表非空,不妨设为L,重复2中步骤,区别在于相加的元素为L的元素和carry
4. 最后判断一下carry是非为0
4.1 为0,直接返回L3的头部
4.2 不为0,L3新建下一个节点,值为carry,返回L3的头部
代码:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ if not l1: return l2 elif not l2: return l1 else: carry=0 l3=None l3_head=None while l1 and l2: tmp1,tmp2=l1,l2 l1,l2=l1.next,l2.next carry, value = divmod(tmp1.val + tmp2.val + carry, 10) if l3: l3.next=ListNode(value) l3=l3.next else: l3_head=l3=ListNode(value) while l1: carry,value=divmod(l1.val+carry,10) l3.next=ListNode(value) l1,l3=l1.next,l3.next while l2: carry, value = divmod(l2.val + carry, 10) l3.next = ListNode(value) l2, l3 = l2.next, l3.next if carry: l3.next=ListNode(carry) return l3_head # l1=ListNode(5) # l1.next=ListNode(9) # l2=ListNode(6) # sol=Solution() # l3=sol.addTwoNumbers(l1,l2) # while l3: # print(l3.val) # l3=l3.next
结果: