方法:
设两个指针同时指向头节点,一个指针的移动步长为1,另一个指针的移动步长为2,若两个指针能再次相遇,说明该链表为循环链表.
说明:若某单链表L只包含头节点head,则head->next==NULL;
若某个循环链表只包含头节点,则head->next=head;
bool IsLoopList(LinkNode *L){
LinkNode *p1=L,*p2=L;
if(L->next==NULL)//只包含头节点,且头节点的next为NULL说明肯定不是循环链表
return false;
do{
p1=p1->next;
p2=p2->next->next;
}while(p2 && p2->next && p1!=p2);
if(p1==p2)
return true;
else
return false;
}