LeetCode 2
https://leetcode.cn/problems/add-two-numbers/description/
难度:中等
递归处理两个链表相加。
时间复杂度:O(n),其中 n 为 l1 长度和 l2 长度的最大值。
空间复杂度:O(n)。递归需要 O(n) 的栈空间。
class Solution {
public:
// l1 和 l2 为当前遍历的节点,carry 为进位
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2, int carry = 0) {
if (l1 == nullptr && l2 == nullptr && carry == 0) { // 递归边界
return nullptr;
}
int s = carry;
if (l1) {
s += l1->val; // 累加进位与节点值
l1 = l1->next;
}
if (l2) {
s += l2->val;
l2 = l2->next;
}
// s 除以 10 的余数为当前节点值,商为进位
return new ListNode(s % 10, addTwoNumbers(l1, l2, s / 10));
}
};