0
点赞
收藏
分享

微信扫一扫

使用快慢指针解决环形链表问题.若为环形链表,快慢指针会有可能总是错过吗

我们在解决环形链表问题时,可以设置快慢二指针,慢指针每次向后移动一位,快指针向后移动多位。通过判断慢指针能否追上快指针(即快指针指向的地址是否等于慢指针指向的地址)来判断该链表是否为环形链表。

假设慢指针入环,此时快慢指针距离为N,则快指针开始追击慢指针,假设快指针每次移动3位,慢指针移动1位,每次追击距离缩小2,此时快慢指针的位置关系为。

使用快慢指针解决环形链表问题.若为环形链表,快慢指针会有可能总是错过吗_快慢指针

如此看来,若N为偶数时,第一次循环就找到了,而若N为奇数,距离变为C-1。

1.C-1为偶数,第二次循环找到。

2.C-1为奇数,则永远追不上。(N为奇数,C为偶数)

我们对永远追不上的情况进行判断。当slow进环时,已经走过了链表除环外的距离L。

且fast的速度是slow的3倍,则fast走了3*L的距离。

3*L=L+x*C+C-N

2*L=(x+1)*C-N

所以不存在C是偶数且N是奇数的情况,快慢指针必将相遇。

使用快慢指针解决环形链表问题.若为环形链表,快慢指针会有可能总是错过吗_链表_02

举报

相关推荐

0 条评论