检测一个链表是否有环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测一个链表是否有环相关的知识,希望对你有一定的参考价值。
定义两个指针fast、slow,其中,fast是快指针,slow是慢指针,二者的初始值都指向链表头,
slow每次前进一步,fast每次前进两步,两个指针同时向前移动,快指针每移动一次都要跟慢指针比较,直到快指针等于慢指针为止,就证明了这个链表是带环的单向链表。
否则,这个是不带环的链表(fast先行到达尾部为NULL,则为无环链表)。
代码:
public boolean IsLoop(Node head) //判断是否有环的函数
{
Node fast = head;
Node slow = head;
if(fast == null)
{
return false;
}
while(fast != null && fast.next != null)
{
fast = fast.next.next; //快指针每次走两步
slow = slow.next; //慢指针每次走一步
if(fast == slow) //每移动一次都进行比较;当快指针等于慢指针时,则就是带环的单向链表
{
return true;
}
}
return ! (fast==null || fast.next==null); //无环
}
以上是关于检测一个链表是否有环的主要内容,如果未能解决你的问题,请参考以下文章