判断思路:设置两个指针(slow, fast),初始值都指向头,slow每次前进一步,fast每次前进两步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇(当然,fast先行头到尾部为NULL,则是无环链表)。
typedef struct Node{
int data;
struct Node *Next;
}*Lnklst;
bool IsExitsLoop(Lnklst pHead)
{
Lnklst slow = pHead, fast = pHead;
while(fast && fast->Next)
{
slow = slow->Next;
fast = fast->Next->Next;
if(slow == fast)
break;
}
return !(fast == NULL && fast->Next == NULL);
}