0%

快慢指针的相遇点问题分析

快慢指针问题

比如这种链表快慢指针题目

判断是否有环,如果有环,怎么计算到环的入口呢?

判断是否有环,快慢指针是否能相遇就可以知道了。现在我们假设这个链表存在环,求环的入口。

如下图:

point.008

若b的速度是a的两倍,a和b同时从起点出发,绕环顺时针跑

point.009

如果慢指针a刚进入环的时候,快指针b应该已经在环的前面了。而且由于b的速度是a的两倍,所以Oa‘的距离等于a’b‘的距离。

point.010

现在我们不考虑上图a’和b’的距离(这个距离等于链头到环入口的距离Oa‘)。假设a和b都是在环上,并且在同一个原定O上顺时针,分析他们的相遇点的情形,如下

point.011

总结

如果遇到一些复杂的问题,我们可以先考虑它的简单情形,然后再考虑让这个简单的情形,如何迁移到复杂的问题。或者把复杂的问题,抛开一些变量因素,进行单独枚举情形到结果。

当慢指针a和快指针b相遇后。再用另外一个指针从链头跑,并且都是跑1步,慢指针也是跑1步,这样他们到环入口的距离是相等的,所以就会在环的入口相遇。

不用公式,通过枚举理解它,为什么当相遇后,用一个指针从链头和相遇点,以1步的速度同时向前,慢指针和链头为起点的指针就会相遇在环的入口。

请我喝杯咖啡~

欢迎加我微信交流~