package main import ( "fmt" ) type ListNode struct { Val int Next *ListNode } func main() { } func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { signal := false tmpstr := "" firstNode := (*ListNode)(nil) result := (*ListNode)(nil) value1 := 0 for l1 != nil || l2 != nil { // tmpNode := &ListNode{} a := 0 if signal { a = 1 } if l1 == nil { value := l2.Val if value+a > 9 { signal = true } else { signal = false } tmpNode.Val = (value + a) % 10 result.Next = tmpNode result = result.Next l2 = l2.Next continue } if l2 == nil { value := l1.Val if value+a > 9 { signal = true } else { signal = false } fmt.Println("l2==nil") tmpNode.Val = (value + a) % 10 result.Next = tmpNode result = result.Next l1 = l1.Next continue } value := l1.Val + l2.Val if value+a > 9 { signal = true } else { signal = false } tmpNode.Val = (value + a) % 10 if value1 == 0 { firstNode = tmpNode result = tmpNode value1 = 1 l1 = l1.Next l2 = l2.Next continue } result.Next = tmpNode result = result.Next l1 = l1.Next l2 = l2.Next } if signal { tmpNode := &ListNode{} tmpNode.Val = 1 result.Next = tmpNode result = result.Next } fmt.Println(tmpstr) return firstNode } //func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { // var str1 string // var str2 string // // for l1 != nil { // if len(str1) < 0 { // str1 = strconv.Itoa(l1.Val) // continue // } // str1 += strconv.Itoa(l1.Val) // } // intnum1 := reverse(str1) // // for l2 != nil { // if len(str2) < 0 { // str2 = strconv.Itoa(l2.Val) // continue // } // str2 += strconv.Itoa(l2.Val) // } // intnum2 := reverse(str2) // intnum3 := strconv.Itoa(reverse(strconv.Itoa(intnum1 + intnum2))) // firstNode := (*ListNode)(nil) // result := (*ListNode)(nil) // value := 0 // for i := 0; i < len(intnum3); i++ { // tmp := &ListNode{} // if value == 0 { // tmp.Val = int(intnum3[i]) // firstNode = tmp // result = tmp // value = 1 // continue // // } // tmp.Val = int(intnum3[i]) // result.Next = tmp // result = result.Next // // } // // return firstNode //} //func reverse(s string) int { // b := []byte(s) // for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 { // b[i], b[j] = b[j], b[i] // } // num, _ := strconv.Atoi(string(b)) // return num //} //func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { // firstNode := (*ListNode)(nil) // result := (*ListNode)(nil) // value := 0 // // for l1 != nil || l2 != nil { // tmpNode := &ListNode{} // if l1 == nil { // tmpNode.Val = l2.Val // result.Next = tmpNode // result = result.Next // l2 = l2.Next // continue // } else if l2 == nil { // tmpNode.Val = l1.Val // result.Next = tmpNode // result = result.Next // l1 = l1.Next // continue // } // tmpNode.Val = l1.Val + l2.Val // if value == 0 { // firstNode = tmpNode // result = tmpNode // l1 = l1.Next // l2 = l2.Next // value++ // continue // } // result.Next = tmpNode // result = result.Next // l1 = l1.Next // l2 = l2.Next // // } // // return firstNode //}