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;
}
分析:我们用两个指针,如果存在环,一个走得快(走两个节点),一个走得慢(走一个节点),快的总会超过慢得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;
}
相关文章推荐
- 【题目13】判断一个链表是否存在环
- 判断一个单向链表中是否存在环
- 判断一个单向链表中是否存在环
- 如何判断一个链表是否有环? 2、如果链表为存在环,如果找到环的入口点?
- 判断一个单向链表中是否存在环
- 判断一个单向链表中是否存在环
- Linked List Cycle 判断一个链表是否存在回路(循环)
- Linked List Cycle-- 判断一个单向链表中是否有环存在
- 如何判断一个单向链表是否存在循环的经典方法
- 判断一个链表是否存在环
- 如何判断 单链表中是否存在环 ( How judges in Singly Linked List whether has a circle )
- 判断一个表是否存在标识列
- 判断一个有向图中是否存在一个环(C++代码)
- 判断一个数是否存在一个数组中
- 判断一个对象是否存在
- C# Visual Studio 2005中判断一个文件夹是否存在
- 判断一个表是否存在
- 判断一个单向链表是否有环,算法证明
- Function:判断一个文件是否存在
- 如何判断一个已知的表中是否存在某个字段,如果不存在就创建它.