|  | @@ -0,0 +1,47 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 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
 | 
	
		
			
				|  |  | +}
 |