main.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type ListNode struct {
  6. Val int
  7. Next *ListNode
  8. }
  9. func (l *ListNode) Print() {
  10. var tmp *ListNode = l
  11. for tmp != nil {
  12. fmt.Printf("%v", tmp.Val)
  13. tmp = tmp.Next
  14. }
  15. fmt.Printf("\n")
  16. }
  17. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
  18. var l1Tmp *ListNode = l1
  19. var l2Tmp *ListNode = l2
  20. var ret *ListNode = &ListNode{-1, nil}
  21. var retTail *ListNode = ret
  22. var buf int = 0
  23. for l1Tmp != nil && l2Tmp != nil {
  24. retTail.Val = l1Tmp.Val + l2Tmp.Val
  25. if buf != 0 {
  26. retTail.Val += buf
  27. }
  28. buf = retTail.Val / 10
  29. retTail.Val %= 10
  30. l1Tmp = l1Tmp.Next
  31. l2Tmp = l2Tmp.Next
  32. if l1Tmp != nil || l2Tmp != nil {
  33. retTail.Next = &ListNode{-1, nil}
  34. retTail = retTail.Next
  35. }
  36. }
  37. for l1Tmp != nil {
  38. retTail.Val = l1Tmp.Val
  39. if buf != 0 {
  40. retTail.Val += buf
  41. buf = retTail.Val / 10
  42. retTail.Val %= 10
  43. }
  44. l1Tmp = l1Tmp.Next
  45. if l1Tmp != nil {
  46. retTail.Next = &ListNode{-1, nil}
  47. retTail = retTail.Next
  48. }
  49. }
  50. for l2Tmp != nil {
  51. if retTail == nil {
  52. retTail = &ListNode{-1, nil}
  53. }
  54. retTail.Val = l2Tmp.Val
  55. if buf != 0 {
  56. retTail.Val += buf
  57. buf = retTail.Val / 10
  58. retTail.Val %= 10
  59. }
  60. l2Tmp = l2Tmp.Next
  61. if l2Tmp != nil {
  62. retTail.Next = &ListNode{-1, nil}
  63. retTail = retTail.Next
  64. }
  65. }
  66. if buf != 0 {
  67. retTail.Next = &ListNode{buf, nil}
  68. retTail = retTail.Next
  69. }
  70. return ret
  71. }
  72. func arrayToListNode(l []int) *ListNode {
  73. var i int = 0
  74. var res ListNode = ListNode{l[i], nil}
  75. var tmp *ListNode = &res
  76. i++
  77. for ; i < len(l); i++ {
  78. tmp.Next = &ListNode{l[i], nil}
  79. tmp = tmp.Next
  80. }
  81. return &res
  82. }
  83. func main() {
  84. // tmp11 := ListNode{3, nil}
  85. // tmp12 := ListNode{4, &tmp11}
  86. // var l1 ListNode = ListNode{2, &tmp12}
  87. var l1 *ListNode = arrayToListNode([]int{0})
  88. fmt.Printf("l1 => ")
  89. l1.Print()
  90. var l2 *ListNode = arrayToListNode([]int{2, 7, 8})
  91. fmt.Printf("l2 => ")
  92. l2.Print()
  93. // fmt.Printf("res => ")
  94. addTwoNumbers(l1, l2).Print()
  95. }