🧩Algo 链表

2. 两数相加

难度:🟡 Medium | 标签:链表、模拟 | 状态:⬜ LeetCode 链接

思路

模拟竖式加法。逐位加 + 进位 carry。 链表本身是低位在前,正好和加法运算方向一致。

代码

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* a, ListNode* b) {
        ListNode dummy(0), *tail = &dummy;
        int carry = 0;
        while (a || b || carry) {
            int s = carry + (a ? a->val : 0) + (b ? b->val : 0);
            carry = s / 10;
            tail->next = new ListNode(s % 10);
            tail = tail->next;
            if (a) a = a->next;
            if (b) b = b->next;
        }
        return dummy.next;
    }
};

复杂度

  • 时间 O(max(m, n)),空间 O(max(m, n))

易错 / 回顾

  • 循环条件含 carry,避免最后一位进位丢失(5 + 5 应得 [0, 1]
  • 不同长度的链表用三元判 nullptr
  • 链表本身就是逆序存(个位在前),不需要先反转
Related · 链表