package main import ( "fmt" "strconv" ) func main() { //var l1 = &ListNode{ // 2, &ListNode{4, &ListNode{3, nil}}, //} //var l2 = &ListNode{ // 5, &ListNode{6, &ListNode{4, nil}}, //} var l1 = &ListNode{ 9, nil, } fmt.Println(9 + 9999999991) var l2 *ListNode var l2Cuosor *ListNode for i := 0; i < 10; i++ { if i == 0 { l2 = &ListNode{1, nil} l2Cuosor = l2 continue } var temp = &ListNode{9, nil} l2Cuosor.Next = temp l2Cuosor = l2Cuosor.Next } // [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) } /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type ListNode struct { Val int Next *ListNode } func listPrint(list *ListNode) { for list != nil { fmt.Printf("%v", list.Val) if list.Next == nil { break } fmt.Printf(" -> ") list = list.Next } } 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 } 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 } cursor.Next = temp cursor = cursor.Next } return head }