package main /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ // (3->2->1) + (2->1) = (5->3->1), 123 + 12 = 135 func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { // get head of result list head := &ListNode{(l1.Val + l2.Val) % 10, nil} remain := int((l1.Val + l2.Val) / 10) curr := head l1 = l1.Next l2 = l2.Next // while l1 != [] and l2 != [], calculate l1 + l2 for l1 != nil && l2 != nil { curr.Next = &ListNode{(l1.Val + l2.Val + remain) % 10, nil} remain = int((l1.Val + l2.Val + remain) / 10) curr = curr.Next l1 = l1.Next l2 = l2.Next } // l1 / l2 is nil if l1 != nil { curr.Next = &ListNode{(l1.Val + remain) % 10, l1.Next} remain = int((l1.Val + remain) / 10) } else if l2 != nil { curr.Next = &ListNode{(l2.Val + remain) % 10, l2.Next} remain = int((l2.Val + remain) / 10) } curr = curr.Next // add remainder for remain != 0 { if curr.Next != nil { curr.Next.Val += remain remain = int(curr.Next.Val / 10) curr.Next.Val %= 10 curr = curr.Next } else { curr.Next = &ListNode{remain, nil} remain = 0 } } return head }