首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

LeetCode Add Two Numbers:鏈表相加

     編輯:C++ 入門

題目

兩個非負整數以逆序鏈表存儲(個位在頭),逐位相加返回結果鏈表。例:(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;
}

要點

  • 虛擬頭節點簡化邊界。
  • 處理長度不等:缺位視為 0。
  • 最後進位別忘記。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved