https://leetcode-cn.com/problems/add-two-numbers/
    点击查看【bilibili】

    1. # Definition for singly-linked list.
    2. # class ListNode:
    3. # def __init__(self, val=0, next=None):
    4. # self.val = val
    5. # self.next = next
    6. class Solution:
    7. def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
    8. # 首先,我们要考虑如果出现空值的情况
    9. if l1 == None:
    10. return l2
    11. if l2 == None:
    12. return l1
    13. # 创建一个存储结果的Listnode
    14. result = ListNode(0)
    15. p = result
    16. # 创建一个保存进位的变量
    17. carry = 0
    18. while l1 and l2:
    19. # l1.val 与 l2.val 是指当前位的数值
    20. # 第一次进入循环也就是l1与l2的第一位
    21. # 也就是 l1.val=2, l2.val=5
    22. p.next = ListNode((l1.val + l2.val + carry) % 10)
    23. # 我们用 // 做除法运算,然后返回其商的整数部分,舍掉余数
    24. carry = (l1.val + l2.val + carry) // 10
    25. # 在Listnode中刷新下一位
    26. l1 = l1.next
    27. l2 = l2.next
    28. print(p)
    29. print(result)
    30. # 存储Listnode的变量也要前进一位
    31. p = p.next
    32. print(p)
    33. print(result)
    34. # 接下来考虑l2如果位数比l1长的情况
    35. if l2:
    36. while l2:
    37. p.next = ListNode((l2.val + carry) % 10)
    38. carry = (l2.val + carry) // 10
    39. l2 = l2.next
    40. p = p.next
    41. # 接下来考虑l1如果位数比l2长的情况
    42. if l1:
    43. while l1:
    44. p.next = ListNode((l1.val + carry) % 10)
    45. carry = (l1.val + carry) // 10
    46. l1 = l1.next
    47. p = p.next
    48. if carry == 1:
    49. p.next = ListNode(1)
    50. return result.next