您的位置:首页 > 其它

5.判断一个链表是否存在环

2014-12-12 22:56 239 查看
题目:给你一个链表的头指针,让你判断此链表是否存在环!如果存在环,则输出环的入口节点

分析:我们用两个指针,如果存在环,一个走得快(走两个节点),一个走得慢(走一个节点),快的总会超过慢得n圈,并且在环中的某个节点相遇!

这个博客讲得挺好的:http://www.cppblog.com/humanchao/archive/2008/04/17/47357.html

代码实现:

typedef struct node{
int value;
struct node *next;
}Node;

Node *FindLoopPort(Node *head)//判断链表是否存在环,如果存在环,则返回环的入口点
{
Node *slow,*fast;
bool flag=false;
if(head==NULL)
return NULL;
slow=head;
fast=head;
while(slow!=NULL&&fast!=NULL)
{
slow=slow->next;
fast=fast->next->next;
if(slow==fast)//找到环的其中一个点
{
flag=true;
break;
}
}
if(flag==false)
return NULL;
slow=head;
while(slow!=fast)//寻找环的入口点
{
slow=slow->next;
fast=fast->next;
}
return slow;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: