如何判断一个链表是否有环?

 如何判断一个链表是否存在环?

一般思路就是设置两个指针,都指向头结点,不同的是指针的速度不同,一个走的快,定义为快指针,一个走的慢定义为慢指针。倘若存在环形结构,快指针终将与慢指针相遇。
判断有环的代码 bool existCycle(list Node *head){ ListNode *fast(head),*slow(head); while(fast && fast->next } //如果fast 和fast->next 都为真则执行循环体 { fast=fast->next-next; slow=slow-next;//快的结点每次走两步,慢的走一步。 if(fast==slow) //当指针相等时,表面链表中有环 return true; else{ return false} } C++实现。 LinkList *  ListLoop(LinkList *list) //判断一个链表中是否有环
{
 int isLoop=0;
 LinkList *fast,*slow;
 fast=list;
 slow=list;
 while(fast&&fast->next)
 {
  slow=slow->next;
  fast=fast->next->next;//fast每次两步,slow每次一步
  if(fast==slow) //当两指针相等时,判断链表中有环
  {
   isLoop=1;
   break;
  }
 }
  if(isLoop==1)//链表中有环时
  {
   slow=list;
 while(slow!=fast)//一个头指针,一个相遇点指针,两个第一次相等时为环入口点
 {
  slow=slow->next;
  fast=fast->next;
 }
 return slow;
  }
  else 
  {
   cout<<"链表中没有环";
   return NULL;
  }
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部