分别用两个指针步进一步和两步,如果存在循环,则最差在不仅两步的指针遍历循环节两遍后可发现链表循环。
struct Node{
Node* next;
};
bool LoopList(Node* head)
{
if(NULL == head)
{
return false;
}
Node* SinglePace = head->next;
Node* BiPace = head;
while(NULL != SinglePace || NULL != BiPace)
{
if(SinglePace == BiPace)
{
return true;
}
SinglePace = SinglePace->next;
BiPace = BiPace->next;
if(NULL != BiPace)
{
BiPace = BiPace->next;
}
else
{
return false;
}
}
return false;
}