如何检测单链表中的是否存在环
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;
}
设一快一慢两个指针(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;
}
相关文章推荐
- 笔试题:如何判断单链表是否存在环
- 如何判断单链表中是否存在环
- 单链表如何判断是否存在环
- 在PowerShell中如何检测模块是否存在
- 如何判断单链表是否存在环(算法)
- PHP中如何检测一个值为null的变量是否存在
- 如何检测EMail地址是否存在
- 笔试题:如何判断单链表是否存在环
- 如何判断单链表是否存在环
- 笔试题:如何判断单链表是否存在环
- 【转载】如何判断单链表是否存在环
- 如何判断单链表是否存在环 & 判断两链表是否相交
- 如何判断单链表是否存在环
- 如何判断单链表是否存在环
- 如何实现开机自动检测T卡是否存在并将彩信存储到T卡
- Symbian S60 如何检测文件夹是否存在
- 微软面试(or电面)试题——如何判断一个单链表是否存在回路
- 算法面试题:如何判断单链表中是否存在环
- js如何检测打开窗口是否存在的三个方法?
- 如何检测一个变量是否存在?[转]