由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 单链表里找循环链的起点的解法质疑
相关主题
[合集] 快慢指针找链表中的环,别的步长行么?问个nontrivial Java问题
对指针很熟的高手能否给菜鸟分步骤讲解一下这个单链翻转是怎么实现的?单链表构成的循环链表比单链表有什么优势?
讨论 找单链表倒数m的节点 (转载)find start point of loop from linked list
[合集] 关于求解链表中环的起始位置问题openmp并行计算疑问
水平表头问个参数读入和传递的设计问题
请问如何批量把PDF里的表格转换成Excel定义 单链表 数组,会不会很奇怪
[合集] 给两单链表,如何判断从那儿开始merge?Python里面的for i in range(len(enum))[::-1]:到底是什么意思?
问个面试题[bssd] 讨论一点参数调节的浅见
相关话题的讨论汇总
话题: 循环话题: 指针话题: 相遇话题: 解法话题: 针走
进入Programming版参与讨论
1 (共1页)
g*********s
发帖数: 1782
1
zaoxie给了个解法,是基于判定单链表是否存在循环链的解法。算法如下:
1. 维护快慢两指针。快的每次走两步,慢的走一步。一直走下去,若在某点相遇,说
明有循环链。这是经典解法。
2. 慢指针回到原表头,快指针留在相遇点,各自保持步长继续前行,再次相遇点即为
循环链起点。
注意这个带循环链的单链表形状像一个羽毛球拍。循环链相当于拍面,之前的单链相当
于拍柄。拍面
和拍柄交接处是循环链的起点。
假设拍柄长为h>=0,拍面周长c>=2。又假设第一次相遇时,慢指针走了h+x步。可证明x
去。如此快指针走了2(h+x)步,也即是(h+x)+k*c步,k>=1。那么下述等式成立:
2(h+x)=(h+x)+k*c => h+x = k*c (1)
如果慢指针回到原表头,快指针留原地,重新各自出发,保持之前步长,再次相遇时慢
指针走了h+y
步,按zaoxia说法,y==0。那么快指针走的步数是2h,也即是(c-x)+t*c。下面等式成
立:
2h=(c-x)+t*c => 2h+x = (t+1)*c (2)
由(1)和(2)得到:h = (t+1-k)*c。这显然可以构造出反例。
t****t
发帖数: 6806
2
你连人家的解法都没看清, 还质疑呢--相遇后两指针都是一步步走了, 没有快慢的分别
. 洗洗睡吧, 啊?

明x

【在 g*********s 的大作中提到】
: zaoxie给了个解法,是基于判定单链表是否存在循环链的解法。算法如下:
: 1. 维护快慢两指针。快的每次走两步,慢的走一步。一直走下去,若在某点相遇,说
: 明有循环链。这是经典解法。
: 2. 慢指针回到原表头,快指针留在相遇点,各自保持步长继续前行,再次相遇点即为
: 循环链起点。
: 注意这个带循环链的单链表形状像一个羽毛球拍。循环链相当于拍面,之前的单链相当
: 于拍柄。拍面
: 和拍柄交接处是循环链的起点。
: 假设拍柄长为h>=0,拍面周长c>=2。又假设第一次相遇时,慢指针走了h+x步。可证明x
:
g*********s
发帖数: 1782
3
更新了,呵呵。

【在 t****t 的大作中提到】
: 你连人家的解法都没看清, 还质疑呢--相遇后两指针都是一步步走了, 没有快慢的分别
: . 洗洗睡吧, 啊?
:
: 明x

z***e
发帖数: 5393
4
(我觉得我这个说法比用网球拍要通俗一些):
这是数学题啊。
别考虑什么linked list,把图画出来先:
<--m----->
g*********s
发帖数: 1782
5
就是字符画图不方便,才用球拍类比。我觉得比喻很形象,一目了然啊。

【在 z***e 的大作中提到】
: (我觉得我这个说法比用网球拍要通俗一些):
: 这是数学题啊。
: 别考虑什么linked list,把图画出来先:
: <--m----->

1 (共1页)
进入Programming版参与讨论
相关主题
[bssd] 讨论一点参数调节的浅见水平表头
一个数据结构中的数学求和问题求教 (转载)请问如何批量把PDF里的表格转换成Excel
问个算法问题[合集] 给两单链表,如何判断从那儿开始merge?
用什么算法能减少这个循环里的运算量?问个面试题
[合集] 快慢指针找链表中的环,别的步长行么?问个nontrivial Java问题
对指针很熟的高手能否给菜鸟分步骤讲解一下这个单链翻转是怎么实现的?单链表构成的循环链表比单链表有什么优势?
讨论 找单链表倒数m的节点 (转载)find start point of loop from linked list
[合集] 关于求解链表中环的起始位置问题openmp并行计算疑问
相关话题的讨论汇总
话题: 循环话题: 指针话题: 相遇话题: 解法话题: 针走