目录

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

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
最好的药物是乌梅1 小时前
【蓝桥杯速成】| 3.数据结构
数据结构·算法·蓝桥杯
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧1 小时前
C语言_数据结构总结10:二叉树的递归/非递归遍历
c语言·数据结构·b树·算法·链表·visualstudio·visual studio
TANGLONG2222 小时前
【C++】STL全面简介与string类的使用(万字解析)
java·c语言·开发语言·c++·python·面试·蓝桥杯
012925202 小时前
链表·简单归并
数据结构·链表
I AM_SUN4 小时前
蓝桥杯:山
算法·职场和发展·蓝桥杯
阿巴~阿巴~5 小时前
蓝桥杯刷题——第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
c语言·c++·蓝桥杯
周Echo周17 小时前
6、STL中list的使用方法
数据结构·c++·windows·后端·算法·链表·list
ROCKY_8171 天前
数据结构(三)——链表
数据结构·链表