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

相关推荐
淮北4941 小时前
vim学习进阶
学习·编辑器·vim
炸膛坦客2 小时前
单片机/C/C++八股:(二十)指针常量和常量指针
c语言·开发语言·c++
I_LPL2 小时前
hot100贪心专题
数据结构·算法·leetcode·贪心
sayang_shao3 小时前
ARM架构运行模式学习笔记
arm开发·学习·架构
颜酱3 小时前
DFS 岛屿系列题全解析
javascript·后端·算法
WolfGang0073213 小时前
代码随想录算法训练营 Day16 | 二叉树 part06
算法
炸膛坦客3 小时前
单片机/C/C++八股:(十九)栈和堆的区别?
c语言·开发语言·c++
happymaker06264 小时前
web前端学习日记——DAY04
前端·学习
2401_831824964 小时前
代码性能剖析工具
开发语言·c++·算法
是wzoi的一名用户啊~4 小时前
【C++小游戏】2048
开发语言·c++