蓝桥杯---链表题目1

文章目录

1.题目概述

这个题目模拟的就是两个数字的求和:在这个过程中我们的每一个数字都是按照相反的这个顺序给出来的,例如254,在这个链表上面进行表示的时候就是452,这个是顺序的问题,在这个题目上面也是有这个对应的说明的:数字按照逆序的方式进行存储;

给定的这个示例1里面:342+465都是按照这个相反的这个顺序排列的,但是这个进行求和的结果是按照我们的正常的这个顺序进行计算的,得到的结果就是807也是使用的这个逆序的方式进行表示的;

2.思路分析

我们首先需要明白这个题目为什么需要逆序:342+465这两个数字进行加法操作的时候,实际上这个逆序是方便我们进行处理的,因为我们相加操作的时候,是从这个个位开始计算结果的,因此这个逆序之后,我们可以直接从这个链表的第一个节点开始进行这个运算,这个是简化了我们的相关操作的;

如果题目给的不是逆序的这个链表,这个时候你需要想办法获取这个最后一个数字,然后进行求和,这样反而会变得更加复杂一些,因此如果题目没有进行这个逆序的操作,我们是需要首先对于这个链表里面的元素进行逆序的处理的,这样才可以方便我们的后续的操作;

首先就是进行这个指针的定义,cur1和cur2分别指向这两个链表里面的第一个元素,这个时候我们的这个计算的过程就开始了;t就是计算这个对应的数位上面的数字的求和的结果;

我们需要定义一个虚拟的头结点,为什么需要进行定义虚拟头结点,这个原因需要明白:如果你不进行这个虚拟的头结点的定义,你需要把这个7放到头结点里面去,就是你需要进行额外的处理,而且最后返回的之后不方便,定义了这个虚拟的头结点之后,你直接把这个计算的结果连接到我们的虚拟头结点的后面,最后返回的时候直接返回这个虚拟头结点的next位置,这个非常方便,希望你可以用心体会这个好处;

原本的这个t=7,放到我们的newhead虚拟节点的下一个位置之后,这个t就会变成0,这个时候cur1,cur2指向的就是新的元素,这个时候两个元素就是6+4=10,但是这个时候t=10的话,我们往这个链表里面并入的元素是0,也就是t%10操作结果,剩下的那个t/10当做的进位的,所以我们不能放到链表里面去,而是需要和下一位一起进行处理

接下来,这个cur1这个时候已经是没有数据了,所以这个时候cur2的位置对应的元素和我们的这个进位的1,也就是我们的这个t剩下的1相加,等于5放到我们的这个链表的后面;

上面的这个操作结束之后,我们的这个cur2本来应该是继续移动的,但是这个时候cur2下一个位置也是没有任何的元素了,这个时候我们的整个过程就结束了;

3.代码解析

首先进行这个cur1,cur2的相关的定义,prev就是我们的尾指针,cur1和cur2只要有一个不是空的,我们的这个循环就需要继续,所以这个while里面的这个逻辑运算符是或者,而不是且;

t!=0主要是因为防止这个最后一次计算的hi后依然是存在这个进位的,例如333+664,最后的这个还是进了一个1,这个时候虽然cur1和cur2都结束了,但是这个t里面还是有结果的,这个结果我们是不可以扔掉的;

粗人不是空的时候加到t上面去,移动到下一个位置,cur2也是同理,prev.next就是连接到我们的这个虚拟头节点后面的这个元素,根据上面分析的结果t%10的结果放到我们的这个链表里面去,prev继续右移,t需要进行这个更新的操作;

相关推荐
leoufung28 分钟前
链表题目讲解 —— 删除链表的倒数第 n 个节点(LeetCode 19)
数据结构·leetcode·链表
JHC00000040 分钟前
交换链表中的节点
数据结构·链表
做怪小疯子20 小时前
LeetCode 热题 100——链表——反转链表
算法·leetcode·链表
树在风中摇曳1 天前
带哨兵位的双向循环链表详解(含 C 代码)+ LeetCode138 深度解析 + 顺序表 vs 链表缓存机制对比(图解 CPU 层级)
c语言·链表·缓存
文涛是个小白呀1 天前
Java集合大调研
java·学习·链表·面试
编程小Y1 天前
配置Associated Domains时,需要注意哪些细节?
职场和发展·蓝桥杯
leoufung2 天前
LeetCode 92 反转链表 II 全流程详解
算法·leetcode·链表
leoufung2 天前
LeetCode 61. 旋转链表(Rotate List)题解与思路详解
leetcode·链表·list
vir022 天前
P12155 [蓝桥杯 2025 省 Java B] 消失的蓝宝
java·职场和发展·蓝桥杯
小龙报2 天前
《算法通关指南数据结构和算法篇(2)--- 链表专题》
c语言·数据结构·c++·算法·链表·学习方法·visual studio