如何判断一个链表是否有环

  • Post author:
  • Post category:其他




如何判断一个链表是否有环



问题陈述

​ 如何判断一个链表是否有环,如果有,则返回第一个进入环的节点,没有则返回null。



思路

​ 如果一个链表无环,那么遍历链表一定可以遇到链表的终点;如果链表有环,那么遍历链表就永远在环内转下去。具体如下:

​ 1.设置快慢指针分别为fast和slow。开始,slow和fast都指向链表的头节点head。然后slow每次移动一步,fast每次移动两部,在链表中遍历。

​ 2.如果链表无环,fast指针在移动过程一定先遇到终点,直接返回null,表示链表无环。

​ 3.如果有环,fast和slow一定在环中相遇。相遇时,fast重新回到head位置,slow不动。接下来,fast指针每次移动一步,slow依然每次移动一步,继续遍历。

​ 4.fast和slow指针一定会再次相遇,并在第一个入环的节点处相遇,证明略。



代码

public Node getLoopNode(Node head){
   
    if 



版权声明:本文为computer_user原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。