@@ -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{
- cursor.Next = temp
- cursor = cursor.Next
+ lastNode = lastNode.Next
+ if carry != 0 {
+ tmp := &ListNode{Val: carry, Next: nil}
- return head
+ return result