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

来源:互联网 发布:苏州十大网络教育机构 编辑:程序博客网 时间:2024/04/30 09:04

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

分析:我们用两个指针,如果存在环,一个走得快(走两个节点),一个走得慢(走一个节点),快的总会超过慢得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;}


0 0
原创粉丝点击