定义两个指针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); //无环
}
时间: 2024-12-23 08:25:34