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