image.png
    image.png

    1. package main
    2. import "fmt"
    3. type ListNode struct {
    4. Val int
    5. Next *ListNode
    6. }
    7. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    8. l1 = revertNode(l1)
    9. l2 = revertNode(l2)
    10. dummyHead := &ListNode{Val: -1,}
    11. var carry int
    12. for l1 != nil || l2 != nil {
    13. var a int
    14. if l1 != nil {
    15. a = l1.Val
    16. l1 = l1.Next
    17. }
    18. var b int
    19. if l2 != nil {
    20. b = l2.Val
    21. l2 = l2.Next
    22. }
    23. sum := a + b + carry
    24. carry = sum / 10
    25. node := &ListNode{
    26. Val: sum % 10,
    27. }
    28. head := dummyHead.Next
    29. node.Next = head
    30. dummyHead.Next = node
    31. }
    32. if carry > 0 {
    33. node := &ListNode{
    34. Val: carry,
    35. }
    36. head := dummyHead.Next
    37. node.Next = head
    38. dummyHead.Next = node
    39. }
    40. return dummyHead.Next
    41. }
    42. func revertNode(l *ListNode) *ListNode {
    43. var pre *ListNode
    44. curr := l
    45. for curr != nil {
    46. next := curr.Next
    47. curr.Next = pre
    48. pre = curr
    49. curr = next
    50. }
    51. return pre
    52. }
    53. func main() {
    54. a1 := &ListNode{
    55. Val: 7,
    56. }
    57. b1 := &ListNode{
    58. Val: 2,
    59. }
    60. a1.Next = b1
    61. c1 := &ListNode{
    62. Val: 4,
    63. }
    64. b1.Next = c1
    65. d1 := &ListNode{
    66. Val: 3,
    67. }
    68. c1.Next = d1
    69. a2 := &ListNode{
    70. Val: 5,
    71. }
    72. b2 := &ListNode{
    73. Val: 6,
    74. }
    75. a2.Next = b2
    76. c2 := &ListNode{
    77. Val: 4,
    78. }
    79. b2.Next = c2
    80. r := addTwoNumbers(a1,a2)
    81. for r != nil{
    82. fmt.Println(r.Val)
    83. r = r.Next
    84. }
    85. }