【单链表】找出单链表中环的“入口”
来源:互联网 发布:科比2009总决赛数据 编辑:程序博客网 时间:2024/04/29 09:48
题目:
找出单链表中环的“入口”。
解答步骤:
1、用快慢指针判断是否存在环(慢指针走一步,快指针走两步)。若存在环则继续下面的计算,若不存在则返回nullptr;
2、记录快慢指针相遇的节点n0.
3、一个指针从链表头结点出发,另一个指针从n0出发,“同步前进”,相遇的节点就是环的“入口”。
分析:
由于快慢指针所走的“步数”相同,但快指针每一步是慢指针的两倍,所以快慢指针在n0相遇时,快指针所走距离是慢指针的两倍,即:
S=Length+Ns*R+s0 (1)
2S=Lengh+Nf*R+s0 (2)
上式中,S是慢指针所走距离,R是环的长度,s0是环入口到n0的距离,Ns是慢指针在环中绕的圈数,Nf是快指针在环中绕的圈数。
(2)式减(1)式,可得
S=(Nf-Ns)*R,其中Nf>Ns
可见S是R的倍数!假设S=k*R,k是一个正整数,代入(1)式可得
Length+s0=(k-Ns)*R,令j= k-Ns,j是一个正整数。
可见Length+s0也是R的倍数!已知节点n0到环入口的距离为R-s0,Length=j*R-s0.
令一个指针从链表头结点出发,另一个指针从n0出发,“同步前进”,必然会在某个节点相遇。当j=1时,Length=R-s0,显然相遇节点就是环入口。当j>1时,仍然在环入口相遇,想想为什么? 0 0
- 【单链表】找出单链表中环的“入口”
- 找出有环链表中环的入口节点
- 判断单链表是否存在环,并找出环的入口
- 单链表之检测链表是否有环并找出环的入口点
- 判断一个单链表是否有环,若有,找出环的入口节点
- 安全编程: 警惕输入--找出并保护程序的入口
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 如何判断单链表有环,并找出环的入口
- 判断链表中是否有环、并找出环的入口
- 判断单链表是否有环,若有请找出入口
- 判断单链表是否有环,如果有找出环的入口位置=>求两个相交链表的交点
- 一个链表中包含环,请找出该链表的环的入口结点。
- java面试题(剑指Offer):找出该链表的环的入口结点
- 一个链表中包含环,请找出该链表的环的入口结点
- 关闭iOS虚拟键盘的几种方法
- splice()和split()
- css 控制文本显示两行 超过省略号显示
- 高通8x12平台开机画面制作工具
- android根据坐标获取相应控件,判断点是否在控件上
- 【单链表】找出单链表中环的“入口”
- 关于大型网站技术演进的思考(十四)--网站静态化处理—前后端分离—上(6)
- 向Dreamwearer安装emmet插件时提示“无法更新菜单,将不会安装该扩展”的解决方法
- 杂七杂八
- ios8地图定位
- win7中右击“计算机”点“管理” 则出现“该文件没有与之关联的程序来执行操作
- android中读取properties文件
- 实现KMP算法的几种理解方法
- Python写自动化之以不同优先级启动进程