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

相关推荐
不想写代码的星星10 小时前
虚函数表:C++ 多态背后的那个男人
c++
Gorway11 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风11 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect11 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea1 天前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
端平入洛2 天前
delete又未完全delete
c++
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉