当前位置: 首页 > news >正文

数据结构之单链表和环形链表的应用(二)-

目录

  • 一、相交链表
  • 二、环形链表I
  • 三、环形链表II
  • 总结


一、相交链表

相交链表
在这里插入图片描述
在这里插入图片描述

首先理解什么是链表相交,相交即存在共用的节点,链表相交有三种情况,

  1. 中间位置相交
  2. 头部就开始相交
  3. 尾部相交

在这里插入图片描述
如图pcurA和pcurB就都有一个next指针指向同一个节点
这几种链表结构画成图如下
在这里插入图片描述
为什么说链表中没有第一种结构呢?
在这里插入图片描述
相交点即一个节点,其包括两个组成部分,一个是存储的数据,一个是next指针,一个节点的next指针不可能同时指向两个节点

这里也可以总结出两个链表相交的条件:
两个链表的尾节点相同,两个链表一定相交

思路:求两个链表的长度,长链表先走长度差步,长短链表开始同步遍历,找相同的节点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

return NULL把结果给远程服务器,会把结果包装一下,最后输出没有相交点


二、环形链表I

环形链表I
简单来说,如果链表带环,链表尾节点的next指针不会直接置为空,且遍历链表是一个死循环的
补充:环形链表的尾节点甚至可以指向自己
在这里插入图片描述

思路:快慢指针,慢指针每次走一步,快指针每次走两步,如果slow和fast指向同一节点,说明链表带环,类似于表盘的时钟和分钟

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充:快慢指针在一个链表上开始遍历,如果该链表不是带环的,那节点一定为空,这种链表又分为奇数和偶数情况
在这里插入图片描述

证明1:接下来最重要的部分来了,为什么在带环链表里面,慢指针每次走一步,快指针每次走两步,最终一定会相遇

在这里插入图片描述
图中slow的位置是入环点,入环之后是一个圆,其运动路径是一个圆。假设slow走到入环点,fast已经走到如图位置,此时slow和fast之间的距离最大,为N,此时slow走一步,fast走两步
在这里插入图片描述
二者之间距离变为N+1-2=N-1,继续就是N-2,N-3,如图最后变为0,也就是相遇,所以慢指针走一步,快指针走两步,如果是环形链表一定会相遇,就像表盘当中的时针和分针一样。

证明2:在环形链表中,慢指针每次走一步,快指针每次走3,4,5步,快慢指针在环形链表中还会相遇吗?

在这里插入图片描述
这里就以慢指针每次走一步,快指针每次走三步为例,依旧假设此时slow刚入环,此时slow和fast之间的距离最大,为N。
此时slow走一步,fast走三步,二者距离变为N+1-3=N-2。再一次就是N-2+1-3=N-4。
在这里插入图片描述
此时二者之间距离想要变为0,N必须要是偶数才行,这一圈才可以追上。若N为奇数(比如说N=7),7-2=5,5-2=3,3-2=1,1-2=-1。这一圈便追不上了
这样本来fast在追slow,二者距离变为-1,fast在slow前面,变为slow追fast。
当套圈之后,slow和fast的距离便变为了下图红线的长度,加入一圈的周长是C,套圈之后二者的距离便变为了C-1
在这里插入图片描述
在C-1的距离又要slow走一步,fast走三步,继续开始追逐
在这里插入图片描述
如果会相遇,说明在环形链表里面,fast走三步也能判断链表是否是带环的,反之

接下来就要证明C-1到底是奇数还是偶数
在这里插入图片描述
这是在第二圈开始追逐,这里fast的位置不代表fast第一圈入环之后到此处,slow就入环,在此之前fast可能已经走了好几圈,下图给出fast和slow的路程关系
在这里插入图片描述
由于快指针无论在圈里走几圈,都不影响其在圈里的位置,所以(n+1)可以忽略掉,就剩下C-N,前面明确的规定N是个奇数,所以C也一定为奇数。

所以得出结论N为奇数,C也一定为奇数,所以在下一圈,快慢指针也一定会相遇

最终结论就是下图:
在这里插入图片描述


三、环形链表II

环形链表II
在这里插入图片描述
前一道题用快慢指针判断了链表是否带环,如果是一个带环的链表,快慢指针一定会相遇,但是相遇节点不一定是入环节点,可以是环内的任意一个节点

思路:首先,快慢指针一定会在环里相遇,相遇点到入环节点的距离 == 头节点到入环节点的距离

在这里插入图片描述
在这里插入图片描述
接下来要找起始节点,就一个从头出发,一个从相遇点出发,同步遍历,当走到了同一个节点,那这个节点一定是入环节点

代码如下:
在这里插入图片描述

证明:为什么在带环链表中,快慢指针相遇点到入环节点的距离 == 头节点到入环节点的距离

在这里插入图片描述
图中有一处标注有些偏差,头节点到入环节点的距离为L,假设环的周长为R
在这里插入图片描述
(n-1)R是快指针在环里面饶了多少圈,快指针无论绕多少圈都是在相遇点和slow相遇,所以(n-1)R可以忽略,所以最后得出红字部分结论


总结

真写爽了,数据结构这部分的题写的想吐了,创作不易,三连支持~


文章转载自:

http://K2YO8plF.bqLkr.cn
http://1vYcX6i6.bqLkr.cn
http://BSj9wiWd.bqLkr.cn
http://R3BT22DN.bqLkr.cn
http://rpTnt8aT.bqLkr.cn
http://pT3ZnzVJ.bqLkr.cn
http://XimAnvYS.bqLkr.cn
http://MlN5hXm1.bqLkr.cn
http://r9zkmPN4.bqLkr.cn
http://QkHeQTdA.bqLkr.cn
http://f8P1Bec6.bqLkr.cn
http://29Gs8soX.bqLkr.cn
http://kkZ7JaXv.bqLkr.cn
http://ywjW3RXx.bqLkr.cn
http://uGW0R8vc.bqLkr.cn
http://PYEwKLAS.bqLkr.cn
http://wbNMJs7z.bqLkr.cn
http://xU6cgmdi.bqLkr.cn
http://aCBKc20g.bqLkr.cn
http://ZBduOcAJ.bqLkr.cn
http://tUIpiBJ5.bqLkr.cn
http://dBQTAnM7.bqLkr.cn
http://tNUGS5EY.bqLkr.cn
http://gblCBLhF.bqLkr.cn
http://81hnECVi.bqLkr.cn
http://jnRVJZIi.bqLkr.cn
http://ZhzkLode.bqLkr.cn
http://qVGMExjj.bqLkr.cn
http://T6B0j4H5.bqLkr.cn
http://gOb6RWal.bqLkr.cn
http://www.dtcms.com/a/367806.html

相关文章:

  • 第二阶段WinForm-12:UI控件库
  • 题解 洛谷P13778 「o.OI R2」=+#-
  • 从零到一:人工智能应用技术完全学习指南与未来展望
  • 用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
  • 后端Long类型数据传给前端造成精度丢失
  • 2025年GEO优化公司:AI驱动的增长新引擎——权威深度解析与遴选指南
  • Redis是单线程的,为啥那么快呢?经典问题
  • 【Python】数据可视化之核密度
  • 从传统CNN到残差网络:用PyTorch实现更强大的图像分类模型
  • 【DINOv3教程2-热力图】使用DINOv3直接生成图像热力图【附源码与详解】
  • 追觅极境冰箱震撼上市:以首创超低氧保鲜科技打造家庭健康中心
  • n8n中文版部署步骤说明
  • Leetcode 876. 链表的中间结点 快慢指针
  • JavaSe之多线程
  • java程序员的爬虫技术
  • CPU设计范式(Design Paradigms)有哪些?
  • MVCC是如何工作的?
  • springboot在线投票系统(代码+数据库+LW)
  • 如何设计用户在线时长统计系统?
  • timm==0.5.4 cuda=11.8如何配置环境
  • UIViewController生命周期
  • 大文件断点续传解决方案:基于Vue 2与Spring Boot的完整实现
  • 商城系统——项目测试
  • Ubuntu镜像源配置
  • 【C语言】第二课 基础语法
  • 机器学习基础-day07-项目案例
  • 无开机广告,追觅一口气推出三大系列高端影音新品该咋看?
  • Vben5 自带封装好的组件(豆包版)
  • 漏洞修复 Nginx SSL/TLS 弱密码套件
  • IDEA终极配置指南:打造你的极速开发利器