快慢指针在链表中的应用
快慢指针寻找链表中间值
快慢指针指的是定义两个指针,这两个指针的移动速度一快一慢,以此来制造出自己想要的差值,这个差值可以让
我们找到链表上相应的结点。一般情况下,快指针的移动步长为慢指针的两倍
利用快慢指针,我们把一个链表看成一个跑道,假设a的速度是b的两倍,那么当a跑完全程后,b刚好跑一半,以
此来达到找到中间节点的目的。
如下图,最开始,slow与fast指针都指向链表第一个节点,然后slow每次移动一个指针,fast每次移动两个指针。

快慢指针判断链表是否有环

使用快慢指针的思想,还是把链表比作一条跑道,链表中有环,那么这条跑道就是一条圆环跑道,在一条圆环跑道
中,两个人有速度差,那么迟早两个人会相遇,只要相遇那么就说明有环。


快慢指针寻找有环链表环的入口
当快慢指针相遇时,我们可以判断到链表中有环,这时重新设定一个新指针指向链表的起点,且步长与慢指针一样
为1,则慢指针与“新”指针相遇的地方就是环的入口。


由上推导可知,当快慢指针相遇后,定义一个新指针,与慢指针速度相同,则新指针与慢指针将会在入口处相遇。
快慢指针计算有环链表环的大小
在证明链表是否有环的过程中,快慢指针第一次相遇。此后,快指针继续按一次两步的速度走,慢指针按一次一步的速度走,并设置一个计数器count = 0,每走一次加1,。当快慢指针再次相遇时,快指针刚好比慢指针多走了R步,而计数器count == C。
以奇数个数节点的的环为例

恰好在慢指针走完一圈后相遇,1-->2, 2-->3…… 7-->1
此时count=7=C
以偶数个数节点的环为例

同样,恰好在慢指针走完一圈后相遇,1-->2, 2-->3…… 8-->1
此时count=8=C

浙公网安备 33010602011771号