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

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版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1370398

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366842

  • Golang版本:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364599

3. 编码实现

核心伪代码如下:

函数 合并链表并相加(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版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1370398

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366842

  • Golang版本:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364599

4.小结

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

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

  • Python编码实现:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1509965

  • Java编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1510007

  • Golang编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1509945

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

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

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

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

相关文章

YOLOv5

使用Yolov5 什么是PyTorch? PyTorch 是一个基于 Python 的开源机器学习库(深度学习框架),它主要用于深度学习任务,为构建和训练神经网络提供了灵活且高效的平台,它们提供了完整的生态系统,包括模型定义、训练、验证…

【access开发】导入excel 并生成表

hi,大家好呀! 最近天气越来越暖了,在这个春暖花开的季节了,每天心情应该都是美美的,正所谓一年之计在于春,在这个美好的季节,大家一起努力学习学习吧!那我们来看看今天学点啥呢&…

查看GPU型号、大小;CPU型号、个数、核数、内存

GPU型号、大小 nvidia-smiCPU型号 cat /proc/cpuinfo | grep model name | uniqCPU个数 cat /proc/cpuinfo | grep "physical id" | uniq | wc -lCPU核数 cat /proc/cpuinfo | grep "cpu cores" | uniqCPU内存 cat /proc/meminfo | grep MemTotal参考…

如何使用AIOps明确Devps的问题归责

引言 拿出一个确凿的证据往往是解决背锅问题的重要办法。只有这样,才能够在没有互相指责、逃避责任或为自己及团队开脱等不良闹剧的情况下达成共识。DevOps 团队可以借助 AIOps 数据支持的可信度,让问题更清晰、背景更明确,从而一致做出更好…

Yolo系列之Yolo v3的概述、网络结构以及与v1,v2对比

Yolo v3的概述、模型理解以及与v1,v2对比 目录 Yolo v3的概述、模型理解以及与v1,v2对比1 YOLOv3概述1.1 概念1.2 主要特点1.3 优缺点 2 网络结构理解2.1 核心网络框架2.2 先验框2.3 特征图2.4 Softmax层替换 3 Yolo v3与v1,v2对比3.1 网络结构3.2 多尺度预测3.3 分类器与损失函…

AIGC工具平台-百叶窗卡点视频

本模块通过智能算法自动分析音频节奏,精准识别高潮卡点,并生成与音乐高度同步的动态视频。同时支持 百叶窗样式的个性化设置,增强视觉冲击力,助力用户打造节奏感强、富有创意的视频作品。 此外用户可灵活管理图片素材&#xff0c…

【原创】通过S3接口将海量文件索引导入elasticsearch

在医院海量影像文件通过s3传到蓝光存储时,要找一个文件需要全部文件遍历一遍,效率非常非常低。 S3 是对象存储服务,本身不是专门为快速文件查找设计的,而 Elasticsearch 是搜索引擎,在查找特定文件或数据方面具有明显…

MyBatis注解方式:从CRUD到数据映射的全面解析

目录 1. MyBatis是什么?2.准备工作2.1创建工程2.2 数据准备2.3 持久层代码2.4 单元测试 3.Mybatis的增删改查操作(使用注解方式)3.1 增(insert)3.2 删(delete)3.3 改(update&#xf…

Java 大视界 -- 基于 Java 的大数据机器学习模型的多模态融合技术与应用(143)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

进程管理笔记1-进程线程基础知识

5.1 进程线程基础知识 进程 进程的基本定义: 进行的程序。代码经过编译,变成二进制可执行文件,运行这个可执行文件后,装载到内存中,然后CPU执行其中指令。 并行和并发: 并行指两个任务并列前行&#x…

【VolView】纯前端实现CT三维重建-CBCT

文章目录 什么是CBCTCBCT技术路线使用第三方工具使用Python实现使用前端实现 纯前端实现方案优缺点使用VolView实现CBCT VolView的使用1.克隆代码2.配置依赖3.运行4.效果 进阶:VolView配合Python解决卡顿1.修改VtkThreeView.vue2.新增Custom3DView.vue3.Python生成s…

OpenEuler kinit报错找不到文件的解决办法

客户一套华为大数据集群平台,在一台arm平台openEuler服务器上面安装完集群客户端之后,使用kinit认证出现报错No such file or directory: 最终定位是操作系统/lib64缺少ld包导致,执行下面的命令恢复: ln -sv /lib/ld-linux-aarch64.so.1 /lib64/ld-linux-aarch64.s…

国内首家,百度智能云千帆AppBuilder全面兼容MCP协议

百度智能云千帆 AppBuilder 已兼容 MCP 协议!作为国内首家支持 MCP 协议的大模型应用开发平台(Claude、LangGraph、Cursor、Cline、N8N等海外平台已支持),千帆 AppBuilder 完成兼容后,用户可通过千帆 AppBuilder 轻松调…

uniapp自身bug | uniapp+vue3打包后 index.html无法直接运行

前提: 已经修改了基础路径 打开打包文件,双击运行index.html报错,无法访问页面 uniappvue2项目是可以正常运行的 vue3修改publicPath: ./后,也是可以正常访问打包文件中的index.html 点进控制台提供的链接:https:/…

Ubuntu快速安装使用gRPC C++

目录 引言一、快速安装1. 安装必要依赖库2. 安装gRPC 二、测试使用三、参考博客 引言 关于gRPC随着云原生微服务的火热也流行了起来,而且学好一个gRPC框架对目前来说也是必须的了。然而对于一个基础的小白来说,这个gRPC的框架运用起来是及其的困难&…

AES 简介 以及 C# 和 js 实现【加密知多少系列_3】

〇、AES 简介 AES 的全称是 Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代 DES(Data Encryption StandardData Encryption Standard)加密算法的,因为我们都知道 DES 算法的密钥长度是 56Bit&#xf…

在Django模型中的Mysql安装

安装mysql驱动 文章目录 安装mysql驱动1.打开PowerShell 安装mysql的驱动2.安装mysqlclient驱动2.1开始安装2.2 pip list 进行验证 出现mysqlclient 以及pymysql即可 3.正式安装mysql3.1打开mysql官网 www.mysql.com3.2点击下载 然后划到最后点击mysql社区下载 3.3 点击适合win…

AI赋能企业协作6-FizEIM的功能探索

本系列文章AI赋能企业协作与第一个系列IM工具对比中反复比较了国内外、商业、开源的IM工具以及IM工具的AI支持,在之前的比较对象中,由于信息偏差,Workplus(BeeWorks)已不再开源,这里向各位读者致歉&#xf…

java项目之基于ssm的旅游论坛(源码+文档)

项目简介 旅游论坛实现了以下功能: 用户信息管理: 用户信息新增 用户信息修改 景点信息管理: 景点信息添加 景点信息删除 景点信息修改 论坛类型管理 论坛类型添加 论坛类型修改 论坛类型删除 公告类型管理: 公告类型添加 公…

Linux安装Elasticsearch集群-----docker安装es集群

目录 技术背景 1.2 实验目标 二、实验内容 1.1 服务器规划 二、传统方式安装Elasticsearch集群 2.1 安装Java环境(10.1.1.6/8) 2.3 配置集群节点(以10.1.1.6) 2.4 启动服务 ES Data节点1(10.1.1.8)…