|
@@ -0,0 +1,120 @@
|
|
|
|
|
+package main
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+type ListNode struct {
|
|
|
|
|
+ Val int
|
|
|
|
|
+ Next *ListNode
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (l *ListNode) Print() {
|
|
|
|
|
+ var tmp *ListNode = l
|
|
|
|
|
+
|
|
|
|
|
+ for tmp != nil {
|
|
|
|
|
+ fmt.Printf("%v", tmp.Val)
|
|
|
|
|
+ tmp = tmp.Next
|
|
|
|
|
+ }
|
|
|
|
|
+ fmt.Printf("\n")
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
|
|
|
|
|
+ var l1Tmp *ListNode = l1
|
|
|
|
|
+ var l2Tmp *ListNode = l2
|
|
|
|
|
+ var ret *ListNode = &ListNode{-1, nil}
|
|
|
|
|
+ var retTail *ListNode = ret
|
|
|
|
|
+ var buf int = 0
|
|
|
|
|
+
|
|
|
|
|
+ for l1Tmp != nil && l2Tmp != nil {
|
|
|
|
|
+ retTail.Val = l1Tmp.Val + l2Tmp.Val
|
|
|
|
|
+
|
|
|
|
|
+ if buf != 0 {
|
|
|
|
|
+ retTail.Val += buf
|
|
|
|
|
+ }
|
|
|
|
|
+ buf = retTail.Val / 10
|
|
|
|
|
+ retTail.Val %= 10
|
|
|
|
|
+
|
|
|
|
|
+ l1Tmp = l1Tmp.Next
|
|
|
|
|
+ l2Tmp = l2Tmp.Next
|
|
|
|
|
+
|
|
|
|
|
+ if l1Tmp != nil || l2Tmp != nil {
|
|
|
|
|
+ retTail.Next = &ListNode{-1, nil}
|
|
|
|
|
+ retTail = retTail.Next
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for l1Tmp != nil {
|
|
|
|
|
+ retTail.Val = l1Tmp.Val
|
|
|
|
|
+
|
|
|
|
|
+ if buf != 0 {
|
|
|
|
|
+ retTail.Val += buf
|
|
|
|
|
+ buf = retTail.Val / 10
|
|
|
|
|
+ retTail.Val %= 10
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ l1Tmp = l1Tmp.Next
|
|
|
|
|
+
|
|
|
|
|
+ if l1Tmp != nil {
|
|
|
|
|
+ retTail.Next = &ListNode{-1, nil}
|
|
|
|
|
+ retTail = retTail.Next
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for l2Tmp != nil {
|
|
|
|
|
+ if retTail == nil {
|
|
|
|
|
+ retTail = &ListNode{-1, nil}
|
|
|
|
|
+ }
|
|
|
|
|
+ retTail.Val = l2Tmp.Val
|
|
|
|
|
+
|
|
|
|
|
+ if buf != 0 {
|
|
|
|
|
+ retTail.Val += buf
|
|
|
|
|
+ buf = retTail.Val / 10
|
|
|
|
|
+ retTail.Val %= 10
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ l2Tmp = l2Tmp.Next
|
|
|
|
|
+
|
|
|
|
|
+ if l2Tmp != nil {
|
|
|
|
|
+ retTail.Next = &ListNode{-1, nil}
|
|
|
|
|
+ retTail = retTail.Next
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if buf != 0 {
|
|
|
|
|
+ retTail.Next = &ListNode{buf, nil}
|
|
|
|
|
+ retTail = retTail.Next
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return ret
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func arrayToListNode(l []int) *ListNode {
|
|
|
|
|
+ var i int = 0
|
|
|
|
|
+ var res ListNode = ListNode{l[i], nil}
|
|
|
|
|
+ var tmp *ListNode = &res
|
|
|
|
|
+ i++
|
|
|
|
|
+
|
|
|
|
|
+ for ; i < len(l); i++ {
|
|
|
|
|
+ tmp.Next = &ListNode{l[i], nil}
|
|
|
|
|
+ tmp = tmp.Next
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return &res
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func main() {
|
|
|
|
|
+ // tmp11 := ListNode{3, nil}
|
|
|
|
|
+ // tmp12 := ListNode{4, &tmp11}
|
|
|
|
|
+ // var l1 ListNode = ListNode{2, &tmp12}
|
|
|
|
|
+ var l1 *ListNode = arrayToListNode([]int{0})
|
|
|
|
|
+ fmt.Printf("l1 => ")
|
|
|
|
|
+ l1.Print()
|
|
|
|
|
+
|
|
|
|
|
+ var l2 *ListNode = arrayToListNode([]int{2, 7, 8})
|
|
|
|
|
+ fmt.Printf("l2 => ")
|
|
|
|
|
+ l2.Print()
|
|
|
|
|
+
|
|
|
|
|
+ // fmt.Printf("res => ")
|
|
|
|
|
+ addTwoNumbers(l1, l2).Print()
|
|
|
|
|
+}
|