旧题记录:
C++解法:
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode head3(0);
ListNode* l3 = &head3;
int carry = 0;
while (l1 != nullptr || l2 != nullptr || carry != 0) {
int sum = carry; // 先加上进位
// 如果 l1 不为空,获取 l1 的值并移动到下一个节点
if (l1) {
sum += l1->val;
l1 = l1->next;
}
// 如果 l2 不为空,获取 l2 的值并移动到下一个节点
if (l2) {
sum += l2->val;
l2 = l2->next;
}
// 创建一个新节点存储当前的数位
ListNode* newNode = new ListNode(sum % 10);
carry = sum / 10; // 更新进位
// 将新节点添加到结果链表
l3->next = newNode;
l3 = l3->next;
}
return head3.next;
}
};
其中:ListNode head3(0);这里创建栈对象,而不是指针。因为这个变量是只在函数内使用,如果用new创建,则不能自动释放内存,栈对象在函数返回后会自动释放内存,不用担心内存泄漏。
什么时候适合用堆,什么时候适合用栈?
生命周期短、作用域明确、函数内使用 → 栈
生命周期长、跨函数/返回后仍要用、大小不确定 → 堆
这句话 90% 情况都适用。