算法 - 检测是否链表存在环
来源:互联网 发布:硕士论文数据造假 编辑:程序博客网 时间:2024/05/14 15:21
这儿例子使用快慢指针的办法实现。
(H) LengthX (E)
------------------------+------------+
| |
| |
| | (M) (E->M: LengthY)
+-----------+
(M->E: LengthZ)
Length of circle = LengthY + LengthZ
假定
1. 开始点是H, 环的进入点是E, 快指针和慢指针首次相遇的点是M.
2. 慢指针和快指针首次相遇在M点的时候, 是慢指针首次到达M点, 而此时快指针是第N(N>=2)次到达M点。
3. 此后如何快指针慢指针还是按照原来的逻辑走, 那么当下一次慢指针到达M点的时候, 快指针和慢指针又相遇与M点, 也就是说以后每次他们俩都相遇与M点, 而此时慢指针正好又走了一圈, 而快指针正好又走了两圈。
-- 计算入口点E和环长度--
当慢指针首次到达M点的时候, 慢指针走过的路程是(H->E) 和(E->M)其长度为LengthX+LengthY
而此时快指针走过的长度为2(LengthX+LengthY), 因为慢指针都一步, 快指针走两步.
快指针走过的长度 = LengthX + LengthY + (LengthY + LengthZ) * N = 2 * (LengthX+LengthY) // N >= 1
=> (LengthY + LengthZ) * N = (LengthX+LengthY)
当把快慢指针分别从M点按照步进1的速度往回退的时候, 当慢指针回退到H点时, 快指针正好回退到M点, 此时把快慢指针分别按照步进1的速度前进, 当他们相遇的时候就是环的第一个入口点E。
Code start
Code end
- 算法 - 检测是否链表存在环
- 检测单向链表是否存在环
- 检测单向链表是否存在环
- 检测单向链表是否存在环
- Android检测表是否存在
- sql检测表是否存在,列是否存在,判断类型
- 如何检测单链表中的是否存在环
- 用 JET SQL检测表是否存在
- php 检测mysql表是否存在
- 检测文件是否存在
- 检测文件是否存在
- 检测文件是否存在
- 检测文件是否存在
- 检测进程是否存在
- 检测域名是否存在
- 算法学习之数据结构之链表是否相交,链表是否存在环
- ajax检测用户是否存在
- XML检测节点是否存在
- Struts2.1.8+Spring3.0+Ibatis2.3.4集成(一)
- 大家都辛苦了,进来放松一下,保证你满意哦!
- Flex PopUp传值问题
- javascript with用法(转)
- linux下的常用命令
- 算法 - 检测是否链表存在环
- 心灵是自我作主的地方
- ASP.NET运行.bat文件
- 读取ARRAY资源到字符数组
- 一个页面不能同时存在两个 window.onload()的解决方案
- FFMPEG使用(转)
- (纠结)汽车的XX也致癌吗?跪求指教
- VBA小记
- 常用默认端口列表及功能中文注解