判断是否有环,最长用的办法是利用快慢指针。
慢指针:一步只走一个节点。
快指针:一步走多个节点。
在一个有环的链表中,如果有环存在,那么快慢指针各自不停的走,迟早会指向同一个节点。
#include<iostream>
//构建链表
struct ListNode{
int data;
ListNode* next;
}
bool isHasCycle(ListNode* phead)
{
ListNode* pQuick = phead;
ListNode* pSlowy = phead;
while(pQuick && pSlowy)
{
pQuick = pQuick->next->next; //快指针每次走两步
pSlowy = pQuick->next; //慢指针每次走一步
if(pQuick->data == pSlowy->data) //只要是环形链表,迟早会进判断。
{
return true;
}
}
return false;
}