🧩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 · 链表