可视化图解算法:链表相加( 两数相加)

news/2025/3/21 17:34:39/文章来源:https://www.cnblogs.com/jiangzhou/p/18785503

1. 题目

描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

数据范围:0≤n,m≤10000000 ,链表任意值 0≤val≤9
要求:空间复杂度 O(n),时间复杂度 O(n))

例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

示例1

输入:

[9,3,7],[6,3]

返回值:

{1,0,0,0} 

示例2

输入:

[0],[6,3]

返回值:

{6,3}

2. 解题思路

对于给定的两个链表相加,首先是最后两个节点值的相加,接下来是倒数第二节点值的相加,从后向前执行节点值的相加。即:节点7与节点3相加,再执行节点3与节点6相加(还需加上进位数),最后是节点9与进位数的相加。

也就是说链表的遍历是从后向前的,因此需要先对链表进行反转,再进行节点值的相加操作,最后再对新生成的链表反转。

具体步骤如下:

第一步:反转链表。

对两个链表指向反转操作(如果对链表反转不太熟悉,可以参考前面的文章:《可视化图解算法:反转链表》)。

第二步:执行链表节点值相加操作。

在此过程中需要先定义一个虚拟头节点与进位的变量。

节点3与节点6相加,注意进位值carry=1:

h2指向为Null,新链表的节点为:h1指向的值+carry(进位值):

当h2与h1都指向Null时,需要判断进位值carry是否为0,如果不为0,需要将carry的值单独形成一个节点:

第三步:对新生成的链表反转。

反转之后的链表如下所示:

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1370398
  • Java版本:https://www.bilibili.com/cheese/play/ep1366842
  • Golang版本:https://www.bilibili.com/cheese/play/ep1364599

核心伪代码如下:

函数 合并链表并相加(head1, head2):# 处理空链表情况如果 head1 为空:返回 head2如果 head2 为空:返回 head1# 步骤1:翻转两个链表h1 = 调用 reverse 函数翻转(head1)h2 = 调用 reverse 函数翻转(head2)# 步骤2:执行相加操作创建临时头节点 tmp_head(值为-1)current = tmp_headcarry = 0  # 进位值初始化# 遍历两个链表直到都处理完毕当 h1 不为空 或 h2 不为空 时:sum = carry  # 初始化为进位值如果 h1 不为空:sum += h1的值h1 指向下一个节点如果 h2 不为空:sum += h2的值h2 指向下一个节点# 计算新值和进位carry = sum // 10  # 取整数除法结果new_val = sum % 10  # 取余数# 创建新节点并连接current.next = 创建新节点(new_val)current = current.next# 处理最后可能的进位如果 carry > 0:current.next = 创建新节点(carry)# 步骤3:翻转最终结果链表结果链表 = 调用 reverse 函数翻转(tmp_head.next)返回 结果链表

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1370398
  • Java版本:https://www.bilibili.com/cheese/play/ep1366842
  • Golang版本:https://www.bilibili.com/cheese/play/ep1364599

4.小结

两链表相加可以通过以下步骤完成:(1)反转链表;(2)执行链表节点值相加操作,在此过程中需要注意:当h2与h1都指向Null时,需要判断进位值carry是否为0,如果不为0,需要将carry的值单独形成一个节点;(3)对新生成的链表反转。

更多数据结构与算法视频讲解,你可以从以下地址找到:

  • Python编码实现:https://www.bilibili.com/cheese/play/ep1509965
  • Java编码实现:https://www.bilibili.com/cheese/play/ep1510007
  • Golang编码实现:https://www.bilibili.com/cheese/play/ep1509945

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:空山新雨后,天气晚来秋。

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

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

相关文章

VUE中使用BroadcastChannel实现同源多页面实时通信

使用BroadcastChannel广播通信 准备工作:1.channel.js文件,内容如下const Channel = {/*** BroadcastChannel对象Map*/channelMap: new Map(),/*** 发送消息,重载方法,可直接调用,省略对象实例化操作* @param {*} channelName 通道名称,用以区分不同的通道* @param {*} o…

halcon 入门教程(五) 缺陷检测

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18785484有兴趣可以多看其他的halcon教程halcon 学习教程目录本篇主要讲一些常见的缺陷检测方法,目前只会讲一些,后面有空的话会不断的补充完整。因为缺陷的种类实在太多太多了,各种各样的缺陷可能都要用各种…

万字长文详解SIFT特征提取

本文对 SIFT 算法进行了详细梳理。SIFT即尺度不变特征变换(Scale-Invariant Feature Transform),是一种用于检测和描述图像局部特征的算法。该算法对图像的尺度和旋转具有不变性,并且在一定程度上能够抵御亮度变化和视角变化,具备较强的鲁棒性。此外,SIFT检测流程还提出了…

记录---学习项目如何用Docker部署

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 写在前面 Docker对比传统虚拟机 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效…

龙信年终技术考核wp

龙信年终技术考核wp 容器密码:MjAyNeWKoOayuQ== 假期里打的第一场取证比赛,一开始名次还挺高,后面服务器不太会做了,排名直接狂掉,获奖的名额太少了。其实上学期打的第一场取证也是龙信办的龙信杯,真的好难,还是这个友好。 1. 分析手机备份文件,该机主的QQ号为?(标准格…

规则系统|第二步 连接数据库

1.输出所有的数据库名2.问一下相关负责人这个需求放到哪个库里ssc: {ENGINE: django.db.backends.mysql, NAME: ssc, USER: star, PASSWORD: dpag5BoORZErhu4ttTju, HOST: 122.5.32.82, PORT: 19336} 3.下载dbeaver,连接相关库 4.用dbeaver手动创建需要的表,这里需要的表如下…

Excel甘特图

背景:领导让我在excel上填项目计划, 也就是分配未来的工时。有名称、开始时间、结束时间等。平时业务挺杂的, 其实没有办法准确的填写连贯的工时计划。需要稍微调整一下。甘特图比较直观, 但是MSProject又太大没装,还要收费。上网搜了一下还真有用wps office做的。 wps本身…

JMeter 一站式安装指南:跨平台详解与常见问题解析

前言 本教程为 macOS 与 Windows 用户提供 安全、高效 的 JMeter 安装方案,涵盖从基础安装到进阶配置的全流程。内容包含:✅ 双平台专属指南:针对 macOS 系统优化下载路径(附国内镜像直链),解决“身份不明开发者”警告;Windows 系统提供官方直装与快捷方式配置技巧。✅ …

基于Qt信号槽机制的AI对话工具开发——使用流式输出且支持Function Call

基于Qt信号槽机制的AI对话工具开发 在前面学习了Qt的Http请求,尝试完成了基于Qt界面调用DeepSeek的API,实现了一些基本功能,如记忆对话,流式输出等 点击这里查看 但是我发现内容多了过后代码过于冗杂,层次不清晰,于是打算重新架构一下,并记录一下开发思路 完整源码可以在…

中企出海财务合规难?交给「云+AI」来破局|SAP ERP海外实施商工博科技

2月20日,SAP全球化运营高峰论坛汇聚超1000位出海企业高管和行业专家,共同探讨中国企业在行业多样化、投资模式多元、全球布局因地制宜的全球化新趋势下面临的出海机遇与挑战。这次我们将从合规风险、供应链韧性、人才管理、IT架构、AI赋能等角度进行复盘回顾,探讨如何依托先…

乒乓球比赛

题目:乒乓球比赛(武汉大学机试真题):甲={a,b,c}、乙={x,y,z}两队进行比赛,一直a不和x比,c不和x和z比,请问所有可能的比赛安排 //应该使用全排列 列出所有的比赛结果,再输出满足要求的对局 //但还有一种取巧的方法实现 使用库函数next_Permutation(nums.begin(),nums.end(…

华为开辟的赛道,终究也只有华为敢跑起来

3月20日,华为Pura先锋盛典召开。一部被称为阔折叠的华为Pura X正式亮相。之前外界对这款新品有诸多猜想,今天终于揭开了神秘面纱:这是一部看上去不太像手机的手机,很宽很“阔”。全新形态的产品打破了人们对手机的刻板印象,也给了手机未来更多的想象。同时作为首款全面搭载…