IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构_链表OJ特别篇——环形链表 -> 正文阅读

[数据结构与算法]数据结构_链表OJ特别篇——环形链表

环形链表有一个非常重要的特点,那就是一旦开始遍历,就无法停止,一直循环,会超出时间限制

常见的几种形式(圆圈内为存储的数据值)

PNG图像

解决这个题的一个比较常规的思路

题目地址

设置一快一慢两个指针,快的指针每次走2步,慢的每次走1步

在慢的指针走到环的时候,快的指针早就到了环里了,因此可以看作快的指针跑到了慢的后面(类似于套圈吧

而且快的指针与慢的指针有差距,由于快的指针每次2步,慢的1步,因此差距在以每次为1的速度削减,直到最后减到0

此时指针相交

既然快的指针和慢的指针能相交,就说明了有环,否则快的指针一定先指向NULL,且两者一定不会相遇

QQ截图20220730201835 image-20220730215140710

这个题的重点不在于这个题本身,而在于它衍生出来的疑问

  1. slow一次走1步,fast一次走3步,fast能追上slow吗?fast一次走4步呢?走n步呢?请证明
  2. 请求出链表环的入口点
  1. slow一次走1步,fast一次走3步,fast能追上slow吗?fast一次走4步呢?走n步呢?请证明

不一定能追上,特殊情况下可能永远追不上!

先看fast一次走3步的情况

QQ截图20220730202009

再看一次走4步和n步的情况

QQ截图20220730202009

因此fast走2步,slow走1步,两者步幅差为1,N和C一定是整数,一定能追上
其余情况要看N和C的大小
在没给出环的具体长度时, N和C都是不确定的

  1. 请求出链表环的入口点

此处为进阶的题目链接

假设slow跟fast在meet结点相遇

【meet】 到 【环入口点】 的距离设为 X

【链表头】 到 【环入口点】的距离设为 L

【环】的长 度设为 C

img

根据上面的分析,slow一次走一步,fast一次走两步,那么

fast走过的路程的slow的2倍

slow跟fast相遇时,slow一定是处于刚进入环的第一圈

因为二者一定会在距离差为负数(也就是fast跑到slow前面)之前相遇,而fast的速度又比slow快

但是fast不知道已经跑了几圈了,假设fast跑了n圈

那么slow的路程为 L+X

fast的路程为 L+X+n*C

得到等式

2*(L+X)=L+X+n *C

L+X=n*C

L=n*C-X

L的长度跟n*C-X的长度一样

也就是说从meet走上n圈再往回退X步,距离跟L一样

而从meet走上n圈再往回退X步,就是环入口点的位置

L也是从head到环入口点的距离

所以得到的结论就是

如果从head和从meet同时出发,一次走一步,一定会相遇在环入口点

(这个结论就无关了fast绕圈次数n还有环的长度C、不带环部分的长度L了,因为测试用例不同这些值就不同,但根据公式会得到客观结论)

image-20220730214711257

结束

That’s all, thanks for reading!💐

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:07:37  更:2022-08-06 11:12:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:26:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码