123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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
- }
|