您的位置:首页 > 其它

如何检测单链表中的是否存在环

2013-11-18 22:44 281 查看
转自http://iask.sina.com.cn/b/20946143.html

设一快一慢两个指针(Node *fast, *low)同时从链表起点开始遍历,其中快指针每次移动长度为2,慢指针则为1。则若无环,开始遍历之后fast不可能与low重合,且fast或fast->next最终必然到达NULL;若有环,则fast必然先进入环,且由于fast移动步长为2,low移动步长为1,则在low进入环后继续绕环遍历一周之前,fast必然能与low重合。于是函数可写如下:// 若有环,encounter是fast与low重合的地方
bool hasCircle(Node* head, Node* &encounter)
{
Node *fast = head, *low = head;
while(fast && fast->next)
{
fast = fast->next->next;
low = low->next;
if(fast == low)
{
encounter = fast;
return true;
}
}
encounter = NULL;
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: