如何判断一个链表是否有环
问题陈述
如何判断一个链表是否有环,如果有,则返回第一个进入环的节点,没有则返回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 版权协议,转载请附上原文出处链接和本声明。