方法一:
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { if l1 == nil { return l2 } if l2 == nil { return l1 } //建立一个虚拟的头节点 dummyNode := &ListNode{} //循环动态维护 cur := dummyNode val := 0 carry := 0 l1Cur, l2Cur := l1, l2 for l1Cur != nil || l2Cur != nil { val = 0 if l1Cur != nil { val += l1Cur.Val l1Cur = l1Cur.Next } if l2Cur != nil { val += l2Cur.Val l2Cur = l2Cur.Next } cur.Next = &ListNode{ Val: (val + carry) % 10, } cur = cur.Next carry = (val + carry) / 10 } //最后可能有进位 if carry != 0 { cur.Next = &ListNode{ Val: carry, } } return dummyNode.Next}