|
@@ -2,7 +2,6 @@ package main
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
- "strconv"
|
|
|
)
|
|
|
|
|
|
func main() {
|
|
@@ -15,7 +14,6 @@ func main() {
|
|
|
var l1 = &ListNode{
|
|
|
9, nil,
|
|
|
}
|
|
|
- fmt.Println(9 + 9999999991)
|
|
|
var l2 *ListNode
|
|
|
var l2Cuosor *ListNode
|
|
|
for i := 0; i < 10; i++ {
|
|
@@ -24,7 +22,6 @@ func main() {
|
|
|
l2Cuosor = l2
|
|
|
continue
|
|
|
}
|
|
|
-
|
|
|
var temp = &ListNode{9, nil}
|
|
|
l2Cuosor.Next = temp
|
|
|
l2Cuosor = l2Cuosor.Next
|
|
@@ -32,11 +29,6 @@ func main() {
|
|
|
|
|
|
// [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
|
|
|
//[5,6,4]
|
|
|
-
|
|
|
- var i int64 = 1000000000000000000000000000001
|
|
|
- fmt.Println(i)
|
|
|
- return
|
|
|
-
|
|
|
var result = addTwoNumbers(l1, l2)
|
|
|
listPrint(result)
|
|
|
}
|
|
@@ -65,39 +57,51 @@ func listPrint(list *ListNode) {
|
|
|
}
|
|
|
|
|
|
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
|
|
|
- var l1Str, l2Str string
|
|
|
- var l1Int, l2Int int64
|
|
|
- var l1Temp, l2Temp = l1, l2
|
|
|
- for l1Temp != nil {
|
|
|
- l1Str = strconv.FormatInt(int64(l1Temp.Val), 10) + l1Str
|
|
|
- l1Temp = l1Temp.Next
|
|
|
- }
|
|
|
- for l2Temp != nil {
|
|
|
- l2Str = strconv.FormatInt(int64(l2Temp.Val), 10) + l2Str
|
|
|
- l2Temp = l2Temp.Next
|
|
|
+ var l1Tmp, l2Tmp = l1, l2
|
|
|
+ var result, resultTemp, lastNode *ListNode
|
|
|
+ var carry int = 0
|
|
|
+ for l1Tmp != nil && l2Tmp != nil {
|
|
|
+ var value = l1Tmp.Val + l2Tmp.Val + carry
|
|
|
+ tmp := &ListNode{
|
|
|
+ Val: value % 10,
|
|
|
+ Next: nil,
|
|
|
+ }
|
|
|
+ carry = value / 10
|
|
|
+ if resultTemp == nil {
|
|
|
+ resultTemp = tmp
|
|
|
+ result = resultTemp
|
|
|
+ } else {
|
|
|
+ resultTemp.Next = tmp
|
|
|
+ resultTemp = resultTemp.Next
|
|
|
+ }
|
|
|
+ lastNode = l1Tmp.Next
|
|
|
+ if l1Tmp.Next == nil {
|
|
|
+ lastNode = l2Tmp.Next
|
|
|
+ }
|
|
|
+ l1Tmp = l1Tmp.Next
|
|
|
+ l2Tmp = l2Tmp.Next
|
|
|
}
|
|
|
|
|
|
- l1Int, _ = strconv.ParseInt(l1Str, 10, 64)
|
|
|
- l2Int, _ = strconv.ParseInt(l2Str, 10, 64)
|
|
|
-
|
|
|
- var num = strconv.FormatInt(l1Int+l2Int, 10)
|
|
|
- fmt.Println("---------------", num, l1Str, l2Str)
|
|
|
- var head = &ListNode{}
|
|
|
- var cursor *ListNode
|
|
|
- for i := len(num) - 1; i >= 0; i-- {
|
|
|
- var val, _ = strconv.ParseInt(num[i:i+1], 10, 32)
|
|
|
- var temp = &ListNode{}
|
|
|
- temp.Val = int(val)
|
|
|
- temp.Next = nil
|
|
|
-
|
|
|
- if i == len(num)-1 {
|
|
|
- head = temp
|
|
|
- cursor = head
|
|
|
- continue
|
|
|
+ for lastNode != nil {
|
|
|
+ var value = lastNode.Val + carry
|
|
|
+ var tmp = &ListNode{
|
|
|
+ Val: value % 10,
|
|
|
+ Next: nil,
|
|
|
}
|
|
|
-
|
|
|
- cursor.Next = temp
|
|
|
- cursor = cursor.Next
|
|
|
+ carry = value / 10
|
|
|
+ if resultTemp == nil {
|
|
|
+ resultTemp = tmp
|
|
|
+ result = resultTemp
|
|
|
+ } else {
|
|
|
+ resultTemp.Next = tmp
|
|
|
+ resultTemp = resultTemp.Next
|
|
|
+ }
|
|
|
+ lastNode = lastNode.Next
|
|
|
+ }
|
|
|
+ if carry != 0 {
|
|
|
+ tmp := &ListNode{Val: carry, Next: nil}
|
|
|
+ resultTemp.Next = tmp
|
|
|
+ resultTemp = resultTemp.Next
|
|
|
}
|
|
|
- return head
|
|
|
+ return result
|
|
|
}
|