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

链表(两数相加)(1)

一.题目2. 两数相加 - 力扣LeetCode二.思路讲解2.1 审题题目给出两个非空链表每个链表表示一个非负整数并且数字是逆序存储的即链表的头节点对应数字的最低位。例如链表2-4-3表示数字342。我们需要将这两个数相加并返回一个同样以逆序形式表示和的链表。题目保证除了数字 0 本身否则不会以 0 开头这确保了输入是合法的。2.2 虚拟头节点哨兵位在链表操作中经常需要处理头节点的特殊情况。例如当我们依次向结果链表中添加节点时第一个节点需要被设置为头节点后续节点则接在尾部。如果不用虚拟头节点就需要单独判断是否第一个节点这会使代码变得繁琐。因此我们引入一个虚拟头节点new_head它是一个哨兵节点不存储实际数据仅作为一个占位符。这样我们始终将新节点接在head初始指向虚拟头节点的后面然后移动head。最终返回new_head-next即可得到真正的结果链表头。这种方法避免了边界判断简化了代码逻辑。2.3 思路讲解本题的核心是模拟竖式加法从最低位链表头开始逐位相加并处理进位。具体步骤如下初始化两个指针cur1和cur2分别指向两个输入链表的头节点用于遍历。创建虚拟头节点new_head并让指针head也指向它head将始终指向当前结果链表的末尾。定义变量t用于存储当前位的和以及进位初始为 0。然后进入循环条件为cur1 ! nullptr || cur2 ! nullptr即只要有一个链表还有节点就继续处理。在循环中如果cur1非空则将其值加到t上并将cur1移向下一个节点。如果cur2非空同样将其值加到t上并将cur2移向下一个节点。然后当前位的和为t % 10我们创建一个新节点存入该值并将其接到head-next然后移动head到新节点。更新进位t t / 10用于下一轮计算。循环结束后可能还存在最后的进位即t不为 0此时需要再创建一个节点存放该进位值并接到链表末尾。最后返回new_head-next即结果链表的头节点。三.代码演示/** * 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* cur1 l1; ListNode* cur2 l2; ListNode* new_head new ListNode; ListNode* head new_head; int t 0; while(cur1 ! nullptr || cur2 ! nullptr) { //判断l1是不是空节点 if(cur1 ! nullptr) { t cur1-val; cur1 cur1-next; } //判断l2是不是空节点 if(cur2 ! nullptr) { t cur2-val; cur2 cur2-next; } ListNode* node new ListNode(t % 10);//取t的个位数作为节点的值 t t / 10;//进位 head-next node;//让头节点连接该节点 head head -next;//让头节点往前 } if(t ! 0) { ListNode* node new ListNode(t % 10);//取t的个位数作为节点的值 head-next node;//让头节点连接该节点 } return new_head-next; } };四.代码讲解一、初始化遍历指针和虚拟头节点首先我们需要两个指针cur1和cur2分别指向输入链表l1和l2的头节点用于后续遍历。同时为了简化结果链表的构建我们创建一个虚拟头节点new_head它是一个哨兵节点不存储实际数据。再定义一个指针head也指向这个虚拟头节点head将始终指向当前结果链表的末尾方便我们添加新节点。此外定义一个整型变量t用于存储当前位的和以及进位初始化为 0。二、遍历两个链表进行逐位相加进入while循环条件为cur1 ! nullptr || cur2 ! nullptr即只要两个链表中还有未处理的节点就继续循环。这样能自动处理两个链表长度不一致的情况。在循环内部首先处理两个链表当前节点的值如果cur1不为空则将其值加到t上并将cur1移向下一个节点。如果cur2不为空同样将其值加到t上并将cur2移向下一个节点。此时t中存储的是当前位的和加上来自低位的进位。接着我们创建新节点其值为t % 10即当前位的个位数并将该节点连接到结果链表中将head-next指向这个新节点。然后将head移动到新节点即head head-next这样head始终指向结果链表的尾部。最后更新进位t t / 10为下一位的计算做准备。三、处理最后的进位当循环结束后可能还有一个进位未被处理即t不为 0。例如最高位相加后产生进位此时需要再创建一个新节点其值为t % 10实际上t此时就是进位值可能大于9吗实际上进位最多为1因为两个个位数相加最大99119所以t/10最大为1但为了通用性我们还是用取模。然后将这个节点连接到head-next。四、返回结果链表最后返回new_head-next即虚拟头节点的下一个节点也就是结果链表的真正头节点。五、关键细节虚拟头节点的作用避免了在插入第一个节点时需要特殊判断是否为空链表简化了代码逻辑。长度不一致的处理通过循环条件cur1 ! nullptr || cur2 ! nullptr以及在内部分别判断每个指针是否为空巧妙地处理了链表长度不等的情况。进位变量t的妙用t同时存储当前位的和以及进位每次计算后更新既简洁又高效。最后进位的处理循环结束后必须检查t是否非零否则会丢失最高位的进位。节点创建使用new ListNode(t % 10)动态创建新节点每个节点只存储一位数字。

相关文章:

链表(两数相加)(1)

一.题目 2. 两数相加 - 力扣(LeetCode) 二.思路讲解 2.1 审题 题目给出两个非空链表,每个链表表示一个非负整数,并且数字是逆序存储的,即链表的头节点对应数字的最低位。例如,链表 2->4->3 表示数字…...

从H.264到AV1:主流视频编码标准的演进、选型与实战场景剖析

1. 视频编码标准的发展脉络 我第一次接触视频编码是在2005年,当时用手机拍摄的3GP视频文件总是模糊不清。后来才知道,这背后是MPEG-4 Part 2编码在起作用。如今视频编码技术已经迭代了好几代,从最早的MPEG-2到现在的AV1,每一次升级…...

Creo混合与扫描混合实战:从基础到高级建模技巧

1. Creo混合与扫描混合功能入门指南 第一次打开Creo的混合功能时,我完全被那些参数搞懵了。后来才发现,这个看似复杂的功能其实就像搭积木一样简单。混合建模的核心思想就是把不同形状的截面按照特定规则连接起来,形成三维实体。比如你想做个…...

java架构一/1:微服务电商/地基/登录

一、构建聚合工程(Java-Maven)foodie-dev为父工程,其他为子模块。foodie-dev-api的pom.xml引入依赖-service,-service引入-mapper,-mapper引入-pojo,-pojo引入-common。二、使用PDMan进行数据库建模&#x…...

OpenClaw多模态实践:千问3.5-27B图片理解+文件整理自动化

OpenClaw多模态实践:千问3.5-27B图片理解文件整理自动化 1. 为什么需要自动化图片管理 上周整理项目资料时,我发现桌面上散落着237张截图——有会议纪要片段、代码报错提示、参考文档关键页,甚至还有随手截的灵感草图。手动分类这些文件花了…...

AI大揭秘:从ChatGPT到深度学习,普通人如何抓住AI风口?

一提及AI,大家脑海里想的是什么呢?是Deepseek、豆包、元宝等软件应用,还是能跑会跳的机器人?或者是那些能自己跑的车子、能自己运转的机器? 这些都是AI,都是人工智能。 基本概念 AI是英文Artificial Intell…...

OpenClaw(小龙虾)Windows 11 一键部署教程|2026 最新版|零代码・免配置・解压即用

适用系统:Windows 11 专业版 / 家庭版 / 正式版(全版本兼容) 项目介绍:OpenClaw 是 GitHub 星标 28W 的开源本地 AI 智能体,可自动操控电脑、整理文件、浏览器自动化、办公自动化,被国内用户称为小龙虾&am…...

从标注到训练:手把手教你用Labelme制作YOLOv8-Pose可用的关键点数据集

从标注到训练:手把手教你用Labelme制作YOLOv8-Pose可用的关键点数据集 在计算机视觉领域,关键点检测技术正逐渐成为研究热点。无论是人体姿态估计、面部表情识别还是工业质检中的零件定位,准确的关键点检测都是实现这些应用的基础。然而&…...

MySQL 索引特性与性能优化全解

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C知识分享》 《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录前言:一. 索引是什么1.1 初…...

SentenceTransformer:计算句子嵌入的模型

原文:towardsdatascience.com/sentencetransformer-a-model-for-computing-sentence-embedding-e8d31d9e6a8f 在这篇帖子中,我们探讨了 2019 年发布的 SentenceTransformer [1],它具有双编码器架构,并将 BERT 调整为产生高效的句子…...

题目整理之线性dp

周赛137_D小苯的序列涂色 #include<bits/stdc.h> #define int long long #define fi first #define se second using namespace std; const int mod1e97; typedef pair<int,int>pii; const int N3e5; int dx[4]{1,-1,0,0}; int dy[4]{0,0,1,-1}; int num[N],inv[N]…...

新手避坑指南:用Pandas高效合并CIC-IDS-2018的10个CSV文件(附内存优化技巧)

新手避坑指南&#xff1a;用Pandas高效合并CIC-IDS-2018的10个CSV文件&#xff08;附内存优化技巧&#xff09; 网络安全数据分析的第一步往往是从处理原始数据集开始。CIC-IDS-2018作为业内广泛使用的基准数据集&#xff0c;其分散在10个CSV文件中的特征数据给初学者带来了不小…...

OpenClaw个人知识库构建:Qwen3-14b_int4_awq自动标注与归档

OpenClaw个人知识库构建&#xff1a;Qwen3-14b_int4_awq自动标注与归档 1. 为什么需要自动化知识管理 作为一个长期与技术文档打交道的开发者&#xff0c;我的本地硬盘里堆积着超过20GB的研究资料——从PDF论文、Markdown笔记到代码片段和会议记录。传统文件夹分类早已失效&a…...

校正协变量的相关:偏相关分析

当你想研究两个变量&#xff08;X 和 Y&#xff09;的关系&#xff0c;但担心其他变量&#xff08;Z&#xff09;可能干扰这个关系时&#xff0c;偏相关分析 (Partial Correlation) 可以在剔除协变量的影响后&#xff0c;计算 X 和 Y 之间更“纯粹”的关联。 1. 核心定义 偏相关…...

数字游民工作流:OpenClaw+千问3.5-27B自动处理跨境邮件

数字游民工作流&#xff1a;OpenClaw千问3.5-27B自动处理跨境邮件 1. 为什么需要自动化邮件处理 作为数字游民&#xff0c;我每天需要处理来自不同时区的客户邮件。这些邮件往往混杂着英语、西班牙语和中文&#xff0c;且包含大量模糊的需求描述。最痛苦的是凌晨三点被手机提…...

OpenClaw+Qwen3-14b_int4_awq:自动化文档生成工具

OpenClawQwen3-14b_int4_awq&#xff1a;自动化文档生成工具 1. 为什么需要自动化文档生成 作为一名技术写作者&#xff0c;我经常面临一个困境&#xff1a;代码写完了&#xff0c;文档却迟迟无法完成。每次面对空白的Markdown文件&#xff0c;总有种无从下笔的感觉。更糟糕的…...

基于SpringBoot + Vue的人工智能时代个人计算机的安全防护科普系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…...

NaViL-9B多场景落地:物流运单图像识别+地址结构化+异常标记

NaViL-9B多场景落地&#xff1a;物流运单图像识别地址结构化异常标记 1. 物流行业的AI变革机遇 现代物流行业每天处理数以亿计的运单&#xff0c;传统人工处理方式面临三大挑战&#xff1a; 效率瓶颈&#xff1a;人工录入一张运单平均耗时30秒&#xff0c;高峰期处理能力不足…...

基于SpringBoot + Vue的鲜花销售系统(角色:用户、商家、管理员)

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…...

小程序常用页面跳转 5 种方式汇总(开发常备手册)

小程序多页面协作离不开路由跳转&#xff0c;不同场景对应不同跳转 API&#xff0c;今天一次性整理齐全&#xff0c;开发随时查阅。保留当前页跳转&#xff08;普通内页&#xff09;wx.navigateTo({url:"/pages/detail/detail"})关闭当前页再跳转wx.redirectTo({url:…...

Python脚本打包成.exe方法

利用 pyinstaller打包 先安装这个库 pip install pyinstaller安装完成后&#xff0c;就可台利用pyinstaller进行打包了 在脚本文件的目录下切到cmd中&#xff0c;执行以下 pyinstaller -F tcping.py-F参数&#xff1a; 表示覆盖打包&#xff0c;不管我们打包几次&#xff0c;都…...

SEO 优化师如何处理网站收录和排名下降的问题

SEO 优化师如何处理网站收录和排名下降的问题 在数字营销中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;是一个至关重要的环节&#xff0c;尤其是对于那些希望在百度上获得高排名和流量的网站。即使是最优秀的SEO策略&#xff0c;也可能会在某些时候面临网站收录和排…...

Linux ioctl系统调用实战

Linux ioctl系统调用实战 ioctl&#xff08;input/output control&#xff09;是Linux系统中一个强大的系统调用&#xff0c;用于设备控制和配置。从网络接口配置到串口通信&#xff0c;ioctl无处不在。本文将深入讲解ioctl的原理和实战应用。 一、ioctl概述 1.1 什么是ioctl i…...

嵌入式轻量级调试追踪组件dbg-trace设计与应用

1. 项目概述dbg-trace是一个面向嵌入式系统的轻量级调试追踪&#xff08;Debug & Trace&#xff09;组件&#xff0c;其核心设计目标是在资源受限的 MCU 环境中提供可配置、低开销、高可靠性的日志输出能力。它不依赖标准 C 库的printf实现&#xff0c;而是基于“追踪端口”…...

Obsidian插件实战:5个提升笔记效率的神器(附避坑指南)

Obsidian插件实战&#xff1a;5个提升笔记效率的神器&#xff08;附避坑指南&#xff09; 如果你正在寻找能够真正提升Obsidian笔记效率的插件组合&#xff0c;这篇文章将为你揭示5个经过实战检验的效率神器。不同于泛泛而谈的插件列表&#xff0c;我们聚焦于那些能够形成工作…...

MySQL索引优化快速入门

这里需要知道什么是B树 从数据结构角度简单分析&#xff1a; 二叉树和B树可以简单理解为通过二分法减少查询的次数&#xff0c;但是仍存在严重的性能问题 1&#xff0c;插入顺序不对时&#xff0c;会退化为链表&#xff0c;时间复杂度由O(logn)变成O(n)。 2. 大数据情况下…...

刷题不再难:用代码随想录和Hot100打造你的算法思维

算法思维跃迁&#xff1a;从代码随想录到Hot100的实战精进指南 1. 算法能力提升的黄金路径 在技术面试中&#xff0c;算法能力往往是区分候选人的关键指标。但许多开发者在刷题过程中常陷入"刷了就忘"的困境&#xff0c;缺乏系统性训练方法。本文将揭示如何通过代码随…...

双向buck-boost电路仿真模型-储能双向DCDC变换器 电压电流双闭环PI控制 蓄电池充放电模式可切换 恒流充电_恒压输出 Matlab_Simulink模型

双向buck-boost电路仿真模型-储能双向DCDC变换器 电压电流双闭环PI控制 蓄电池充放电模式可切换 恒流充电/恒压输出 Matlab/Simulink模型核心控制算法&#xff1a;双闭环 PI 控制器 (MATLAB Function/S-Function) 这是模型的“大脑”。它需要根据模式切换&#xff0c;决定是外环…...

盘姬工具箱功能详解:百余款实用工具助力系统优化

盘姬工具箱最大的特点就是功能的全面性。 软件安装后即可直接使用&#xff0c;打开界面就能看到丰富多样的功能模块。 这些功能模块分类清晰&#xff0c;操作直观&#xff0c;即使是电脑新手也能快速上手。 从日常的小工具到高级的技术工具&#xff0c;盘姬工具箱几乎涵盖了…...

盘姬工具箱:一款值得收藏的免费无广告系统维护神器

在日常使用电脑的过程中&#xff0c;我们难免会遇到各种各样的问题。 系统崩溃、文件误删、右键菜单混乱、网络故障等等&#xff0c;这些问题都让人头疼不已。 为了解决这些问题&#xff0c;很多用户会安装各种专门的工具软件。 但每安装一个软件&#xff0c;都会占用磁盘空…...