一个带环的单链表,一个快指针(每次走三步),一个慢指针(每次走一步),请问这两个指针可能无法相遇吗?
解:
假设慢指针入环时,快指针与慢指针的距离为L,环中共有n个节点,之后慢指针走了m步
解1:
那么两个指针重合的条件是: (线性同余方程)
m % n = (3m+L) % n
也就是 m = 3m +L(mod n)
2m=n-L(mod n)
所以有解的条件是gcd(2,n)能被n-L整除,
所以为了无解,只能是n为偶数,n-l为奇数
也就是 环的长度为偶数,慢指针入环时与快指针相距距离为奇数
解2
上面是大佬给的解答,我不太会线性同余方程,所以我另做了个解答
还是一样的假设
m % n = (3m+L) % n
这一次我们设置
m=a*n+c (1) 走了a圈多c步
3m+L=b*n+c (2)走了b圈多c步
那么将1带入2
3a*n+3c+L=b*n+c
那么
L=(b-3a)*n-2c
此时如果L为奇数,n为偶数,则无解
所以这样的条件无法相遇