| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- /**
 
-  * Definition for singly-linked list.
 
-  * type ListNode struct {
 
-  *     Val int
 
-  *     Next *ListNode
 
-  * }
 
-  */
 
- func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
 
- 	if l1 == nil {
 
- 		return l2
 
- 	} else if l2 == nil {
 
- 		return l1
 
- 	}
 
- 	m, n := 0, 0
 
- 	for cur := l1; cur != nil; cur, m = cur.Next, m+1 {
 
- 	}
 
- 	for cur := l2; cur != nil; cur, n = cur.Next, n+1 {
 
- 	}
 
- 	var li *ListNode
 
- 	var rem int
 
- 	if m < n {
 
- 		li, rem = addRecurse(l2, l1, n, m, 0)
 
- 	} else {
 
- 		li, rem = addRecurse(l1, l2, m, n, 0)
 
- 	}
 
- 	if rem != 0 {
 
- 		li = &ListNode{rem, li}
 
- 	}
 
- 	return li
 
- }
 
- func addRecurse(l1, l2 *ListNode, m, n, i int) (*ListNode, int) { // n <= m
 
- 	if i == m {
 
- 		return nil, 0
 
- 	}
 
- 	a, b := l1.Val, 0
 
- 	next1, next2 := l1.Next, l2
 
- 	if m-n <= i {
 
- 		b = l2.Val
 
- 		next2 = l2.Next
 
- 	}
 
- 	li, rem := addRecurse(next1, next2, m, n, i+1)
 
- 	c := a + b + rem
 
- 	c, rem = c%10, c/10
 
- 	li = &ListNode{c, li}
 
- 	return li, rem
 
- }
 
 
  |