蓝桥杯---链表题目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需要进行这个更新的操作;

相关推荐
Zhang~Ling1 小时前
深入解析C++list:从0到1实现一个完整的链表类
c++·链表·list
此生决int7 小时前
算法从入门到精通——滑动窗口
c++·算法·蓝桥杯
WL_Aurora8 小时前
备战蓝桥杯国赛【Day 16】
python·蓝桥杯
奔跑的Ma~10 小时前
第6篇:蓝桥杯C++进阶突破(难题拆解+算法优化,冲刺国赛高奖)
c++·算法·蓝桥杯·#蓝桥杯备战·#c++编程·编程竞赛
x_yeyue1 天前
2026第十七届蓝桥杯c++B组省赛题解
笔记·算法·蓝桥杯·acm·题解
handler011 天前
【C++ 算法竞赛基础】数论篇:核心公式、经典例题与高频模板
开发语言·c++·算法·蓝桥杯·数论·最大公约数·最小公倍数
WL_Aurora1 天前
备战蓝桥杯国赛【Day 15】
python·蓝桥杯
像素猎人1 天前
蓝桥杯OJ505数字三角形【与简单数字三角形不一样】【2020年省赛真题】【动态规划】
蓝桥杯·动态规划
Controller-Inversion1 天前
23. 合并 K 个升序链表
数据结构·链表
liu****1 天前
第16届国赛蓝桥杯大赛C/C++大学B组
c语言·数据结构·c++·算法·蓝桥杯