循环链表 今天药忘吃喽~ 2023-10-05 20:33 2阅读 0赞 ### 前文回顾 ### 在 [单链表][Link 1] 中,我们重点介绍了单链表,涉及到单链表的结构以及单链表元素的读取、插入、删除。 这篇文章将对循环链表进行简单的介绍。 ### 举例 ### 先举个例子吧,这里就直接引用《大话数据结构》上的例子了: > 你是一个业务员,住在上海,需要在下图的各个城市出差。从上海出发,到北京后再返回上海。 > ![在这里插入图片描述][20210307154915442.png] > > -------------------- > > 有次,你先到南京开会,然后要将上述所有城市走个遍(上海、苏州、无锡、常州、镇江、南京、蚌埠、徐州、上海、济南、天津、北京)。这时候有人说你得先回到上海,因为上海是第一站。此时你会咋想,是不是「这个人智障吧」,我明明可以先走完蚌埠、徐州、上海、济南、天津、北京之后再去上海、苏州、无锡、常州、镇江这几个地方出差。 > > -------------------- > > 分析下: > > 1. 对方那个人的思维是「单链表」的思维,找到某个元素后再想找到某个元素就得从 **头** 开始遍历 > 2. 你将北京和上海连起来后,从当中的某个结点开始遍历整个链表,解决了上述单链表解决不了的问题。 ### 定义 ### 再说下循环链表的定义吧:将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。 ### 结构 ### 带有头结点的空表: ![在这里插入图片描述][20210307163756731.png] 带有头结点的非空循环链表: ![在这里插入图片描述][20210307163816778.png] 此时我们访问第一个结点的时间复杂度是 O( n n n),访问最后一个结点的时间复杂度还是 O( n n n),因为还是需要将整个链表全部遍历一遍。 我们来做下改进,将访问最后一个结点的时间复杂度改进为 O( n n n),如何改进呢: * 不用头指针,而是用指向终端结点的尾指针来表示循环链表,此时查找开始结点和终端结点都很方便了。如下图:![在这里插入图片描述][20210307222922246.png] 终端结点用「rear」表示,则查找终端结点的时间复杂度为 O( 1 1 1),开始结点的话,则为 `rear->next->next`,时间复杂度也为 O( 1 1 1)。 ### 写在最后 ### 关联阅读:先读 [线性表][Link 2],再读 [单链表][Link 1](要搞清楚头结点和头指针)。 这篇博客内容比较简单,但是有个疑惑:带有头结点的循环链表的第一个结点是「头结点」还是说「第一个数据元素所在结点」,欢迎读者阅读与斧正~ [Link 1]: https://mindartisan.blog.csdn.net/article/details/113622842 [20210307154915442.png]: https://img-blog.csdnimg.cn/20210307154915442.png [20210307163756731.png]: https://img-blog.csdnimg.cn/20210307163756731.png [20210307163816778.png]: https://img-blog.csdnimg.cn/20210307163816778.png [20210307222922246.png]: https://img-blog.csdnimg.cn/20210307222922246.png [Link 2]: https://mindartisan.blog.csdn.net/article/details/113271849
相关 【链表】单链表、双向循环链表 文章目录 前言 一:链表(LinkedList) 1.1 链表分类 1.2 介绍 1.3 链表的概念及结构 二: 骑猪看日落/ 2024年03月24日 18:19/ 0 赞/ 217 阅读
相关 循环链表 前文回顾 在 [单链表][Link 1] 中,我们重点介绍了单链表,涉及到单链表的结构以及单链表元素的读取、插入、删除。 这篇文章将对循环链表进行简单的介绍。 举例 今天药忘吃喽~/ 2023年10月05日 20:33/ 0 赞/ 3 阅读
相关 循环链表 循环链表和单链表没有本质上的差别。唯一不同的链表的最后不再是空的了,而是指向了first头指针。只有这样我们才会实现链表的循环功能,那么问题来了,我们在下面的函数功能中 ╰+哭是因爲堅強的太久メ/ 2022年08月13日 13:52/ 0 赞/ 238 阅读
相关 循环链表 一、解析 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表(circular linked list 男娘i/ 2022年06月18日 09:15/ 0 赞/ 290 阅读
相关 循环链表 循环链表 循环链表的原理:最后一个节点的next指向头节点,而不是NULL ![在这里插入图片描述][20181114202301997.png] - 迈不过友情╰/ 2022年04月17日 02:42/ 0 赞/ 265 阅读
相关 循环链表 好久没有接触数据结构和算法了,但是这些在面试中还是需要的所以打算重新复习下 今天打算用js来实现循环链表,看下别人怎么实现,发现很少使用js实现的,而且实现有点问题在对head 忘是亡心i/ 2022年01月20日 05:15/ 0 赞/ 422 阅读
相关 【数据结构】(循环链表)链接循环单链表 > 算法思想:这个就很简单了就是找尾指针的过程进行解链,和链接就行 void Link_A_B(LinkList &A,LinkList &B){ 落日映苍穹つ/ 2021年10月30日 00:20/ 0 赞/ 589 阅读
相关 循环链表/双向链表 Java实现循环链表 / @auther: 巨未 @DATE: 2019/1/4 0004 20:12 @Descriptio 深藏阁楼爱情的钟/ 2021年09月23日 07:02/ 0 赞/ 532 阅读
相关 循环链表 循环链表的定义和结构 在单链表中,使其最后一个结点的指针又指回到第一个结点,这样的线性链表叫做循环链表。 ![Center][] 判断表尾的条件:p→next==L 判 Bertha 。/ 2021年09月10日 23:06/ 0 赞/ 453 阅读
还没有评论,来说两句吧...