兩個非負整數以逆序鏈表存儲(個位在頭),逐位相加返回結果鏈表。例:(2→4→3) + (5→6→4) = 7→0→8(342+465=807)。
同步遍歷兩鏈表,維護進位 carry,構建新節點:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode dummy(0), *p = &dummy;
int carry = 0;
while (l1 || l2) {
int v1 = l1 ? l1->val : 0;
int v2 = l2 ? l2->val : 0;
int sum = v1 + v2 + carry;
p->next = new ListNode(sum % 10);
carry = sum / 10;
p = p->next;
if (l1) l1 = l1->next;
if (l2) l2 = l2->next;
}
if (carry) p->next = new ListNode(1);
return dummy.next;
}