判断单向链表中是否有环

来源:互联网 发布:大数据产业园区 编辑:程序博客网 时间:2024/05/21 11:30
判断单向链表中是否有环
2009-10-09 20:55

核心思想 :用两个速度不一样的指针从头遍历,如果存在环,则快的指针终将追上慢的指针!
bool   CircleInList(Link*   pHead)  
{  
if(pHead   ==   NULL   ||   pHead->next   ==   NULL)//无节点或只有一个节点并且无自环  
{  
return   (false);  
}  
if(pHead->next   ==   pHead)//自环  
{  
return   (true);  
}  
Link   *pTemp1   =   pHead;//step   1  
Link   *pTemp   =   pHead->next;//step   2  
while(pTemp   !=   pTemp1   &&   pTemp   !=   NULL   &&   pTemp->next   !=   NULL)  
{  
pTemp1   =   pTemp1->next;  
pTemp   =   pTemp->next->next;  
}  
if(pTemp   ==   pTemp1)  
{  
return   (true);  
}  
return   (false);  
}