C++学习记录-旧题新做-链表求和

旧题记录:

https://blog.csdn.net/chamao_/article/details/143682196?fromshare=blogdetail&sharetype=blogdetail&sharerId=143682196&sharerefer=PC&sharesource=chamao_&sharefrom=from_link

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% 情况都适用。

相关推荐
灵感__idea4 小时前
Hello 算法:贪心的世界
前端·javascript·算法
澈2075 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
A.A呐5 小时前
【C++第二十九章】IO流
开发语言·c++
ambition202425 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_5 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi5 小时前
前缀和差分
算法·图论
代码旅人ing6 小时前
链表算法刷题指南
数据结构·算法·链表
kebeiovo6 小时前
atomic原子操作实现无锁队列
服务器·c++
Yungoal6 小时前
常见 时间复杂度计算
c++·算法
龙文浩_6 小时前
Attention Mechanism: From Theory to Code
人工智能·深度学习·神经网络·学习·自然语言处理