main.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type ListNode struct {
  6. Val int
  7. Next *ListNode
  8. }
  9. func main() {
  10. data1 := []int{9, 9, 9, 9, 9, 9, 9}
  11. data2 := []int{9, 9, 9, 9}
  12. headA := new(ListNode)
  13. headA.Val = data1[0]
  14. headB := new(ListNode)
  15. headB.Val = data2[0]
  16. t := headA
  17. // data2 := []int{5, 6, 4}
  18. for i := 1; i < len(data1); i++ {
  19. node := new(ListNode)
  20. node.Val = data1[i]
  21. t.Next = node
  22. t = node
  23. }
  24. t = headB
  25. for i := 1; i < len(data2); i++ {
  26. node := new(ListNode)
  27. node.Val = data2[i]
  28. t.Next = node
  29. t = node
  30. }
  31. t = addTwoNumbers(headA, headB)
  32. for t != nil {
  33. fmt.Print(t.Val)
  34. t = t.Next
  35. }
  36. }
  37. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
  38. l3 := new(ListNode)
  39. p := l3
  40. flag := 0
  41. for l1 != nil && l2 != nil {
  42. node := new(ListNode)
  43. node.Val = (l1.Val + l2.Val + flag)
  44. if flag == 1 {
  45. flag = 0
  46. }
  47. if node.Val >= 10 {
  48. node.Val = node.Val - 10
  49. flag = 1
  50. }
  51. // fmt.Print(node.Val)
  52. p.Next = node
  53. p = node
  54. l1 = l1.Next
  55. l2 = l2.Next
  56. }
  57. for l1 == nil && l2 != nil {
  58. node := new(ListNode)
  59. node.Val = l2.Val + flag
  60. if flag == 1 {
  61. flag = 0
  62. }
  63. if node.Val >= 10 {
  64. node.Val = node.Val - 10
  65. flag = 1
  66. }
  67. p.Next = node
  68. p = node
  69. l2 = l2.Next
  70. // fmt.Print(node.Val)
  71. }
  72. for l2 == nil && l1 != nil {
  73. node := new(ListNode)
  74. node.Val = l1.Val + flag
  75. if flag == 1 {
  76. flag = 0
  77. }
  78. if node.Val >= 10 {
  79. node.Val = node.Val - 10
  80. flag = 1
  81. }
  82. p.Next = node
  83. p = node
  84. l1 = l1.Next
  85. // fmt.Print(node.Val)
  86. }
  87. if l1 == nil && l2 == nil && flag == 1 {
  88. node := new(ListNode)
  89. node.Val = 1
  90. p.Next = node
  91. }
  92. return l3.Next
  93. //这里.Next是符合力扣
  94. }