1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| package main
import "fmt"
type ListNode struct { Val int Next *ListNode }
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { var r []int
prev, curr := 0, 0
for { if (l1 == nil) && (l2 == nil) { break }
total := value(l1, 0) + value(l2, 0) + prev
if total >= 10 { prev, curr = 1, total-10 } else { prev, curr = 0, total }
r = append(r, curr)
if l1 != nil { l1 = l1.Next }
if l2 != nil { l2 = l2.Next } }
if prev > 0 { r = append(r, prev) }
return transformNode(r) }
func value(v interface{}, d int) int { switch value := v.(type) { case *ListNode: if value == nil { return d }
return value.Val default: return d } }
func transformNode(i []int) *ListNode { var result, last, prev *ListNode
for _, v := range i { last = &ListNode{v, nil}
if result == nil { result = last } else { prev.Next = last }
prev = last }
return result }
func main() { fmt.Println(addTwoNumbers( &ListNode{2, &ListNode{4, &ListNode{3, nil}}}, &ListNode{5, &ListNode{6, &ListNode{4, nil}}}, ))
fmt.Println(addTwoNumbers( &ListNode{9, &ListNode{9, &ListNode{9, &ListNode{9, &ListNode{9, &ListNode{9, &ListNode{9, nil}}}}}}}, &ListNode{9, &ListNode{9, &ListNode{9, &ListNode{9, nil}}}}, )) }
|