您的位置:首页 > 其它

判断链表是否有环(两种方法)

2015-05-07 13:42 239 查看
如何判断一个链表是否是一个循环链表呢?什么链表是一个循环链表?看图:



一.步数比较法判断是否有环

int HasLoop1(LinkList L){
LinkList cur1=L;//定义结点cur1
int pos1=0,pos2=0;
while(cur1){
pos2=0;//每次重设为0
LinkList cur2=L;
while(cur2){
if(cur2==cur1){
if(pos1==pos2)
break;//步数一样说明没有环
else{
printf("环的位置在第%d个结点处",pos2);
return 0;
}
}
pos2++;
cur2=cur2->next;
}
pos1++;
cur1=cur1->next;
}
return 0;
}




二.快慢指针判断:

int HasLoop2(LinkList L){
int step1=1;
int step2=2;
LinkList p=L;
LinkList q=L;

while(p!=NULL && q!=NULL && q->next!=NULL){
p=p->next;//p走一步

q=q->next->next;//q走两步
if(p==q)
return 1;
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: