单链表环的位置判定及循环次数
来源:互联网 发布:淘宝怎么不让别人看 编辑:程序博客网 时间:2024/05/16 08:11
代码是极易找到的。这里所分析的也是异步指针。
环的入口点的相关证明
设慢指针为p1、快指针为p2,初始时分别指向第一个元素(以下用坐标表示,则此时为p1=p2=1)。如上图,m, n分别代表无环部分、环中元素的个数且已知。
首先可以判断第一次相遇时(即判断相遇代码部分),慢指针p1未遍历链表所有元素进入循环(p1<=m+n)。因为当 p1=m+1时(即环的入口点),p2距p1 t<=n-1(注意图中距离为p2->p1粗线条部分,而非p2-p1) ,两者的步速相差1,故只需p2还需走t 步追上p1,p1到末端还有(n-1)个元素,故可以证明第一次相遇时p1<=m+n。
第一次相遇前,慢指针p1走到入口点,即走了m 步,p2走了 2m 步,m 用在环中,设循环了Q次,(nQ<m<(Q+1)n),此时p2距离是环的第 m-nQ 个元素,p2距p1
n-(m-nQ)个元素,故相遇时p2走了 2m+n-(m-nQ)步,p1走了m+n-(m-nQ)步。设相遇时p2共循环了N次,则 Nn+m<2m+n-(m-nQ)<(N+1)n+m;
让后两指针同步为逐原素遍历,其一指向第一个元素,不妨设为快指针。当这个快指针元素第一次指向环入口时,即经过 m步,此时 慢指针也走了m 步,慢指针共走了m+n-(m-nQ)+m=m+n+nQ步,即为入口点。也就是说,慢指针共走了Q次环,快指针第一次相遇时也走了Q次环,其中 Q<m/n< Q+1。
0 0
- 单链表环的位置判定及循环次数
- POJ 1961 KMP 求前缀循环节 位置及次数
- 计算循环的次数
- 关于点相对于线的位置判定
- for循环次数的验证
- 字符串的匹配次数及匹配结束子串在主串中的位置
- 《C语言及程序设计》实践参考——次数不定的循环的流程图
- C语言初步-第31讲:循环控制结构及流程图(次数不定的循环的流程图)
- 循环节的长度,循环节,循环次数(kmp)
- 循环次数
- 2048格子位置判定
- 二维平面上线段与直线位置关系的判定
- nodejs-初探-简单的判定位置是否在市区API
- 关于判断循环次数的错觉
- struts的s:iterator循环指定次数
- Smarty 限制foreach的循环次数
- 限制输入的次数用到while循环
- samrty 获取当前的循环次数
- 集合的模拟实现(函数模板)
- net start mysql 发生系统错误2
- web前端工程师招聘
- 从客户端(content="<p></p>")中检测到有潜在危险的 Request.Form 值。
- [NOI2002]银河英雄传说(并查集)
- 单链表环的位置判定及循环次数
- js 字符串转换成数字的三种方法
- 一个简单的http请求
- TextView跑马灯显示
- error C2662
- vs2010:无法解析的外部符号 _main
- Collections的sort方法 排序
- XP取SSDT表中指定索引号的函数地址
- 替代ListView的RecyclerView 的使用