package main type ListNode struct { Val int Next *ListNode } func main() { } //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 }