单链表中环的检测
来源:互联网 发布:macair windows 编辑:程序博客网 时间:2024/06/05 08:10
单链表中环的检测
首先设置两个指针,分别命名为fast和slow,fast指针每次向后移2步,slow指针每次向后移1步。如果,fast指针最后走到尾结点,则没有环。如果,fast指针和slow指针相遇,则证明有环。
环的起始结点的查询
当fast与slow相遇之后,fast指针从头结点开始走,每次走1步当fast再次与slow相遇以后,相遇处的结点为环的入口结点
证明
推导1:fast指针的步长是否可以>2
证明:以第一个链表为例,假设步长为3,当 步长>环的长度 会形成死循环,fast和slow无法相遇,存在环确无法验证码。而,构成环的最少需要两个结点,所以,步长设置为2.
推导2:如何证明fast和slow第二次循环相遇处为环的入口结点
证明:设,环的入口结点到head结点的距离为k,即,第k个结点,fast与slow相遇的结点为k结点之后的a个结点(a>=0),环的长度为x,fast在环中转了 n 圈以后与slow第一次相遇与a。则:
k+a=2×(k+a)-nx;//相遇时的结点k+a=nx; //转n圈与k+a相等
此刻,fast回到head结点,步长为1,
当fast结点走到k结点时,slow结点走的路程为,k+a+k=k+nx,nx为在环中循环可忽略,即可发现,第二次相遇位置为 k,即入口结点。
0 0
- 单链表中环的检测
- 单链表中环的检测
- 人脸检测的harr检测函数
- vmware的检测与反检测
- 指标的检测及检测仪器
- 运动物体的检测--对视频检测
- 检测字符的代码
- 对数字的检测
- 灰鸽子的手工检测
- 浏览器的支持检测
- 检测平台的Endian
- as3的hit检测
- 内存泄漏的检测
- 检测浏览器的js
- 内存泄露的检测
- 显示器的信息检测
- 数字图像的边缘检测
- 将要检测的博客
- android之标签icon在文本多行背后或首次位置显示
- 记录一下使用百度Ueditor副编辑器的过程及碰到的问题
- hadoop实例分析之WordCount单词统计分析
- 踩过的坑-WebView加载卡住或者加载不出来的问题
- 庆祝我的Hexo博客搭建成功-nianhua110.github.io
- 单链表中环的检测
- 最小路径覆盖问题(二分图)
- asm基础——计算机的原码和补码
- android 如何在广播里面更新 UI
- iOS多线程之GCD
- LoadRunner压力测试--windows资源监控计数器
- 收藏Android学习相关资料
- sublime text3的安装及emmet插件的傻瓜式安装
- Android项目:手机安全卫士(10)—— 电话归属地显示