当前位置: 首页 > news >正文

【Hot 100 刷题计划】 LeetCode 2. 两数相加 | C++ 分支迭代法

LeetCode 2. 两数相加

📌 题目描述

题目级别:中等

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

  • 示例 1:
    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807。

💡 破题思路:按位模拟与严谨的分支处理

因为链表已经是逆序排列的(个位在头,高位在尾),这刚好符合我们做“竖式加法”从低位向高位进位的习惯。
我们可以维护一个进位/求和变量sum,并在循环中严格区分三种物理情况:

  1. l1l2都没走完:此时将两者的当前节点值相加,并加上上一轮留下的进位sum。算出当前位sum % 10并接入结果链表,同时更新进位sum /= 10
  2. 只有l1没走完:此时l2已经到头了,只需要拿l1的值去和上一轮的进位sum相加,计算当前位和新的进位。
  3. 只有l2没走完:同理,只处理l2和进位sum的相加。

极客细节:虚拟头节点的内存管理
在处理这种需要创建新链表的题目时,很多时候我们会用ListNode* dummy = new ListNode(0);来做虚拟头节点。但这在 C++ 中如果没有对应的delete,是会导致内存泄漏的。
这里的解法极其巧妙地使用了栈上分配ListNode res(0);,然后再用指针ListNode* cur = &res;去进行后续的拼接。函数结束时,res会被系统自动回收,不仅运行速度更快,而且做到了绝对的内存安全!


💻 C++ 代码实现

classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){// 在栈上分配虚拟头节点,安全高效,杜绝内存泄漏ListNoderes(0);ListNode*cur=&res;// sum 既用来记录当前的累加和,也用来向下一位传递进位intsum=0;while(l1||l2){// 情况 1:两个链表都还有数字if(l1&&l2){sum+=l1->val+l2->val;cur->next=newListNode(sum%10);// 取个位数接入新链表cur=cur->next;sum/=10;// 取十位数作为进位保留到下一轮l1=l1->next,l2=l2->next;}// 情况 2:l2 已经走完了,只剩 l1elseif(l1){sum+=l1->val;cur->next=newListNode(sum%10);cur=cur->next;sum/=10;l1=l1->next;}// 情况 3:l1 已经走完了,只剩 l2elseif(l2){sum+=l2->val;cur->next=newListNode(sum%10);cur=cur->next;sum/=10;l2=l2->next;}}// 终极扫尾:如果两个链表都走完了,但最后还有进位没处理(比如 9 + 9 = 18 的那个 1)if(sum)cur->next=newListNode(sum%10);// 返回虚拟头节点的下一个节点,即真实的合并结果returnres.next;}};
http://www.jsqmd.com/news/709012/

相关文章:

  • 2026展厅展馆设计施工:博物馆校史馆企业展厅专业服务商推荐 - 深度智识库
  • Pixelle-Video深度解析:基于ComfyUI架构的AI短视频引擎架构设计与最佳实践
  • 扩散变换器动态补丁调度技术DDiT解析
  • Stable Diffusion Forge终极部署方案:打造高性能AI创作环境的完整指南
  • 如何在Windows上免费实现AirPlay 2投屏:打破苹果生态壁垒的完整指南
  • 告别本地跑模型!用PyCharm专业版SSH直连AutoDL服务器,保姆级配置避坑指南
  • 免费开源屏幕标注神器ppInk:让数字沟通更直观高效的终极指南
  • S32K146 ADC实战:从EB Tresos配置到数据读取,一个真实电池电压采集项目的完整流程
  • 用OpenCV的HOG+SVM手把手教你做个简易行人检测器(附完整代码)
  • 别再死记硬背公式了!用Multisim仿真带你玩转RC文氏桥振荡器
  • .NET 代码规范、CodeReview、 重构
  • 2026年昆明代理记账与工商变更一站式企业财税合规服务深度横评 - 企业名录优选推荐
  • 个人飞行器-第五周制作步骤
  • 跨越生态鸿沟:APK-Installer如何重塑Windows与Android的边界
  • 开题报告被反复打回?一怒之下试了7款AI开题报告工具,这款居然帮你一次通关 - 逢君学术-AI论文写作
  • 你的GRE隧道稳吗?H3C设备上配置Keepalive与密钥验证的避坑指南
  • Go语言构建高可用分布式任务调度框架:从Cron到Copaw的实践
  • 小爱音箱自定义固件终极教程:三步打造你的专属智能语音助手
  • 边缘AI抓取机器人:zeptoclaw项目解析与轻量级视觉抓取实践
  • 2026年5月百达翡丽维修中心最新通知:全国维修网点地址更新,百达翡丽统一服务热线400-1063365正式启用 - 速递信息
  • 2026年4月云南酒席棚/活动雨棚/膜结构景观膜/张拉膜结构车棚/膜结构遮阳棚厂家解析 - 2026年企业推荐榜
  • 基于Tesseract的轻量级HTTP OCR服务部署与实战优化指南
  • 4步掌握Arduino-ESP32开源项目:从嵌入式新手到物联网专家完全指南
  • 阿拉伯语RAG评估框架构建与多方言处理技术
  • 互联网大厂Java求职面试:从Spring Boot到微服务的技术深度探讨
  • 黄气重+痘印深?学生党冲这款常天然精华,温和美白,早晚都能用 - 资讯焦点
  • 炸了!Claude Code 移除 Pro 用户!!
  • AI智能体安全守护:agent-guardian的内存限制与行为监控实战
  • 国产化浪潮下SCA工具选型指南:如何构建安全可控的软件供应链
  • Java 求职面试:技术栈与业务场景的探讨