如何判断一个链表是否有环?
如何判断一个链表是否存在环?
一般思路就是设置两个指针,都指向头结点,不同的是指针的速度不同,一个走的快,定义为快指针,一个走的慢定义为慢指针。倘若存在环形结构,快指针终将与慢指针相遇。判断有环的代码 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;
}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
