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

相关推荐
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本2 天前
离散数学第六课
学习·离散数学
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
m0_547486662 天前
《数据结构教程》全套 PPT课件2026
数据结构