给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

    请你将两个数相加,并以相同形式返回一个表示和的链表。

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

    示例 1:

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807.
    示例 2:

    输入:l1 = [0], l2 = [0]
    输出:[0]
    示例 3:

    输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
    输出:[8,9,9,9,0,0,0,1]

    1. package main
    2. import "fmt"
    3. type ListNode struct {
    4. Val int
    5. Next *ListNode
    6. }
    7. func main() {
    8. fmt.Println("2. 两数相加")
    9. l11 := &ListNode{Val: 3, Next: nil}
    10. l12 := &ListNode{Val: 4, Next: l11}
    11. l13 := &ListNode{Val: 2, Next: l12}
    12. l14 := &ListNode{Val: 9, Next: l13}
    13. printList(l14)
    14. l21 := &ListNode{Val: 4, Next: nil}
    15. l22 := &ListNode{Val: 6, Next: l21}
    16. l23 := &ListNode{Val: 5, Next: l22}
    17. printList(l23)
    18. res := addTwoNumbers(l14, l23)
    19. printList(res)
    20. }
    21. func printList(node *ListNode) {
    22. for node != nil {
    23. fmt.Print(" ", node.Val)
    24. node = node.Next
    25. }
    26. fmt.Println()
    27. }
    28. /**
    29. * Definition for singly-linked list.
    30. * type ListNode struct {
    31. * Val int
    32. * Next *ListNode
    33. * }
    34. */
    35. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    36. carry := 0
    37. temp := &ListNode{}
    38. head := temp
    39. for l1 != nil && l2 != nil {
    40. sum := l1.Val + l2.Val + carry
    41. node := &ListNode{}
    42. node.Val = sum % 10
    43. carry = sum / 10
    44. temp.Next = node
    45. temp = node
    46. l1 = l1.Next
    47. l2 = l2.Next
    48. }
    49. for l1 != nil {
    50. sum := l1.Val + carry
    51. node := &ListNode{}
    52. node.Val = sum % 10
    53. carry = sum / 10
    54. temp.Next = node
    55. temp = node
    56. l1 = l1.Next
    57. }
    58. for l2 != nil {
    59. sum := l2.Val + carry
    60. node := &ListNode{}
    61. node.Val = sum % 10
    62. carry = sum / 10
    63. temp.Next = node
    64. temp = node
    65. l2 = l2.Next
    66. }
    67. if carry > 0 {
    68. node := &ListNode{}
    69. node.Val = carry
    70. temp.Next = node
    71. temp = node
    72. }
    73. return head.Next
    74. }

    https://leetcode-cn.com/submissions/detail/193173502/