Floyd判圈算法
Floyd判圈算法
Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。
判断链表中是否存在环
利用快慢指针,两者初始都在起点S,其中快指针fastindex每一次移动两步,慢指针slowindex每次移动一步,快指针一定比慢指针先进入环中。
需要认识到:快指针相对于慢指针每次是移动一步的,因此在慢指针也进入环后,两者一定能相遇在M点,此时链表便存在环。反之,若快指针移动到空节点,便无环。
题目链接:力扣T141.环形链表
链表环的长度
当两指针相遇在M点时,保持快指针fastindex不动,慢指针slowindex每次移动一步并记录移动步数,当慢指针slowindex再次回到M点即与快指针fastindex相遇后,此时慢指针正好走了环的一圈,步数为环的长度。
链表环的起点
当两指针相遇在M点时,保持慢指针slowindex在相遇处M点,快指针fastindex回到起点S,令快指针fastindex和慢指针slowindex同步每次移动一步,当两者再次相遇时便为环的起点S。