题目

https://leetcode-cn.com/problems/add-two-numbers/
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
image.png

思路

image.png
考虑用变量carry,保存进位。
长度不一致的话,短的链表后面加上0替代加上原来链表结点的值。

代码

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.next = None
  6. class Solution:
  7. def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
  8. # 用一个新的链表表示进位
  9. ans = dummy_node = ListNode(0) # inplace
  10. tmp_node = ListNode(0)
  11. carry = 0
  12. while l1 or l2:
  13. x = l1.val if l1 else 0
  14. y = l2.val if l2 else 0
  15. tmp_sum = x + y + carry
  16. dummy_node.next = ListNode(tmp_sum % 10)
  17. carry = tmp_sum // 10
  18. dummy_node = dummy_node.next
  19. if l1: l1 = l1.next
  20. if l2: l2 = l2.next
  21. if carry > 0:
  22. dummy_node.next = ListNode(carry)
  23. return ans.next