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