【算法专题--链表】两数相加 -- 高频面试题(图文详解,小白一看就懂!!)

目录

一、前言

二、题目描述 

三、解题方法 

⭐双指针 -- 模拟进位 (使用哨兵位头节点)

🥝 什么是哨兵位头节点?  

🍇思路解析

🍍案例图解 

四、总结与提炼 

五、共勉  


一、前言

       两数相加 这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
       本片博客就来详细的讲讲解一下 两数相加 的实现方法,让我们的面试变的更加顺利!!!

二、题目描述 

题目链接:2. 两数相加 - 力扣(LeetCode) 

给你两个 非空 的 链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表

三、解题方法 

⭐双指针 -- 模拟进位 (使用哨兵位头节点)

🥝 什么是哨兵位头节点?  

什么是 哨兵位 头节点? 

  • 它是一个附加的链表结点,该 结点 作为 第一个节点它的数据域不存储任何东西,只是为了操作的方便而引入的。
  • 也就是说,如果一个链表有哨兵节点的话,那么链表表的第一个元素应该是链表的第二个节点。

 哨兵位 --- 头节点的作用:  

  • 比如向链表中插入一个节点,对于没有哨兵位单链表当待插入的节点为链表的第一个节点,由于没有前驱,需要进行特殊处理,从而代码的复杂性增加。 
  • 如果有哨兵位头节点,则第一个节点的处理方式与其它节点相同,可以统一进行处理

🍇思路解析

 题目分析:

一、:给了两个非空的链表,按照逆序的方式存储。OK ,我们先不管他是“逆序”还是“顺序”,对我们来说无所谓。两数相加嘛,很简单的加法计算,因此无论是“逆序”还是“顺序”我们都按照一一对应的位置进行相加就可以了,无所谓顺序如何。

二:问题来了?仅仅是两数相加那么简单吗?如果是 9 + 2 呢?我们难道要输出这位的数字 11吗事实证明,我们要进行——“进位”的操作,这样就满足数学的计算法则了。 

三:说的那么简单,如何进行“进位”这个操作呢?别急~~   先想想,如果我们把 l1 l2 每一位上对应数字 n1、n2 以及进位的数字 rise,三者进行相加 ( n1 + n2 + rise ) ,得到一个“sum”(和),对吧?那么我们对这个”sum“进行 sum / 10 ,这样得到一个数字 C 大家想想这个 C 是不是该位上对下一位的 “进位值” ?


解题思路: 

  • 我们先假设给定的不是链表形式的数字,而是正常的非负整数,则两数相加遵循正常的加法运算,个位数与个位数相加,十位数与十位数相加,如果该位计算结果>9,则向前进位 

  • 那么我们应该怎样取链表中的每一位数字呢?我们定义两个指针,分别指向两个链表的头,然后取出该位置的数字,依次进行计算。 (双指针算法) 

明白上面的大概操作后,肯定还有很多细节没法理解,我们在进行一次图解,让大家更加清楚知道,如何使用双指针 -- 模拟进位


🍍案例图解 

案例图解: l1【2 ,4 ,3】                 l2【5 ,6 ,4】

 

  •  最后,返回 pre_head-> next 即可

 代码:

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {// 创建一个哨兵位节点ListNode* pre_head = new ListNode(-1);// 指向上述 哨兵位节点 作为当前节点ListNode* cur = pre_head;// 模拟进位  双指针 遍历两个链表int rise = 0;  // 保存进位while(l1!=nullptr || l2!=nullptr)  //开始遍历两个链表,l1 和 l2 为两个双指针{int x = l1==nullptr ? 0 : l1->val;int y = l2==nullptr ? 0 : l2->val;// 求和 ,对应位的数字相加 再加上前一位的进位int sum = x + y + rise;rise = sum/10;  // 更新进位sum = sum%10;   // 保留尾数cur->next = new ListNode(sum);// 后移cur = cur->next;if(l1!=nullptr){l1 = l1->next;}if(l2!=nullptr){l2 = l2->next;}}// 最后一步加完后 如果有进位if(rise == 1){cur->next = new ListNode(rise);}return pre_head->next;}
};

 四、总结与提炼 

        最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 两数相加 的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握 

五、共勉  

       以下就是我对 两数相加 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!!  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364077.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用一个二维码实现企业固定资产管理?

固定资产管理中普遍存在盘点难、家底不清、账实不一致、权责不清晰等问题。如果平时不规范化执行,年终面对上上下下、大大小小、成百上千件物资要进行盘点整理的时候,会是十分痛苦且低效的事情。 今天这篇文章就来给大家推荐几家便宜好用的二维码固定资…

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时,经常会遇到不能自动创建离散端口的问题,原因有很多,比如:缺少元器件封装、开路端口、多端子模型等等,这个时候,很多人会选择手动进行端口创建,但是&a…

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数: 函数二 函数三 主函数 运行结果 src: model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征,实现高准确度的身份识别。…

镜头下的光学

说实话,当我看到几何光学的内容全是初中的解析几何的时候,我就觉得讲的方式太原始了,而且太过复杂也看不懂。所以我尝试做了数学建模,发现建模之后模型可以解释一些物理现象,也不会有矛盾的地方,那就算过得…

Tips汇总

爬虫领域 1. 加密参数值 Failed to load 在采集时遇到一个加密参数 Token,搜索 Token 的值,如果是从前面包中返回的,那相对比较好解决,因此进行搜索,却没有搜索到,那我就认为它是加密的算法。 这里其实有…

【全球首个开源AI数字人】DUIX数字人-打造你的AI伴侣!

目录 1. 引言1.1 数字人技术的发展背景1.2 DUIX数字人项目的开源意义1.3 DUIX数字人技术的独特价值1.4 本文目的与结构 2. DUIX数字人概述2.1 定义与核心概念2.2 硅基智能与DUIX的关系2.3 技术架构2.4 开源优势2.5 应用场景2.6 安全与合规性 3. DUIX数字人技术特点3.1 开源性与…

学习gateway网关路由时遇到的问题

遇到这个问题先别慌,我们首先要检查是哪里出问题了,从报错信息中我们可以看到,他说 Unable to find GatewayFilterFactory with name -AddRequestHeader 找不到这个路由过滤器,所以导致网关设置失败,从这条信息上我…

我的北航MEM成长之旅

领完毕业证,2年的学业生涯到此结束。为了方便大家理解后续的内容,这里我们先解释下基本信息,比如MEM到底是个啥?以及北航的MEM都学什么? 1 MEM解读 1.1 MEM是什么? MEM是"Master of Engineering Ma…

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变(Gradients)是一种让两种或多种颜色平滑过渡的视觉效果,广泛应用于网页背景、按钮、边框等,以创造丰富的视觉体验。CSS提供了线性渐变(Linear Gradients)和径向渐变(Radial…

用英文介绍美国总统:Barack Obama First African-American President (2009 – 2017)

Barack Obama: First African-American President (2009 – 2017) Link: https://www.youtube.com/watch?vwHCBI3yypmE&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index44 Introduction Barack Obama made history as the first African-American elected to the pre…

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符: and or not 1.案例一 需求: 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求: # 1. 获取用户输入的用户名和密码 # 2. 判断…

linux的常用系统维护命令

1.ps显示某个时间点的程序运行情况 -a :显示所有用户的进程 -u :显示用户名和启动时间 -x :显示 没有控制终端的进程 -e :显示所有进程,包括没有控制终端的进程 -l :长格式显示 -w :宽…

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收,标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台,用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括&#xff1…

从我邮毕业啦!!!

引言 时间过的好快,转眼间就要从北邮毕业了,距离上一次月度总结又过去了两个月,故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络,欢迎Star! 毕业🎓 6月1号完成了自己的…

ETAS工具导入DEXT生成Dcm及Dem模块(二)

文章目录 前言DcmDcmDsdDcmDslDcmDspDcmPageBufferCfgDem报错解决总结前言 之前一篇文章介绍了导入DEXT之后在cfggen之前的更改,cfggen完成之后,就可以生成dcm,dem的配置了,但生成完配置后,如果直接生成BSW代码,会报错。本文介绍在cfggen完成后,生成BSW代码前的修改 Dc…

程序员学长 | 快速学会一个算法模型,LSTM

本文来源公众号“程序员学长”,仅用于学术分享,侵权删,干货满满。 原文链接:快速学会一个算法模型,LSTM 今天,给大家分享一个超强的算法模型,LSTM。 LSTM(Long Short-Term Memory…

【算法专题--栈】栈的压入、弹出序列 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 💧栈模拟法💧-- 双指针 ⭐ 解题思路 ⭐ 案例图解 四、总结与提炼 五、共勉 一、前言 栈的压入、弹出序列 这道题,可以说是--栈专题--,最经典的一道题,也是在…

PD芯片OTG功能的应用 LDR6500

随着科技的飞速发展,智能手机、平板电脑等电子设备已经成为我们日常生活和工作中不可或缺的工具。这些设备的功能日益强大,应用场景也愈发广泛,但随之而来的是对充电和数据传输效率的高要求。在这一背景下,PD(Power De…

使用shell脚本编写监控系统资源(CPU,内存,磁盘)使用情况

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月20日16点30分 🀄️文章质量:95分 目录 ————前言———— 1.本章目标 2.编写脚本 1.获取内…