判断循环链表 (C语言如何应用快慢指针) ------- 算法笔记004
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了判断循环链表 (C语言如何应用快慢指针) ------- 算法笔记004,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1489字,纯文字阅读大概需要3分钟。
内容图文
![判断循环链表 (C语言如何应用快慢指针) ------- 算法笔记004](/upload/InfoBanner/zyjiaocheng/645/97868d72557241ee8f29784b84385328.jpg)
概念
快慢指针判断链表是否有环
Bool ifLoopOfList(List head){
List quick=NULL;
List slow=NULL;
quick=slow=head;
do{
quick=quick->next->next;
slow=slow->next;
printf("quick->%d\tslow->%d\n",quick->data,slow->data);
if(quick==slow){
return 1;
}
}while(quick);
return 0;
}
工程文件
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node,*List;
typedef int Bool;
List createLoopList(List head,int num,int loopSpot/*定义尾部的指向*/);
Bool ifLoopOfList(List head);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/**
判断链表是否有环这里用性能最优的快慢指针来实现
*/
int main(int argc, char *argv[]) {
List head=(List)malloc(sizeof(Node));
List ret=createLoopList(head,10,3/*定义尾部的指向*/);
if(ifLoopOfList(ret)){
printf("有环链表");
}else{
printf("无环链表");
}
printf("\n");
getchar();
return 0;
}
Bool ifLoopOfList(List head){
List quick=NULL;
List slow=NULL;
quick=slow=head;
do{
quick=quick->next->next;
slow=slow->next;
printf("quick->%d\tslow->%d\n",quick->data,slow->data);
if(quick==slow){
return 1;
}
}while(quick);
return 0;
}
List createLoopList(List head,int num,int loopSpot/*定义尾部的指向*/){
//尾插法
int i=1;
List p=head;
List q=head;
while(num--){
List new =(List)malloc(sizeof(Node));
new->data=i++;
p->next=new;
p=new;
}
/*
无环链表的创建
p->next=NULL;
p=head->next;
*/
for(i=0;i<loopSpot;i++){
q=q->next;
}
p->next=q;
q=head->next;
free(head);
return q;
}
Changlon
发布了32 篇原创文章 · 获赞 0 · 访问量 729
私信
关注
内容总结
以上是互联网集市为您收集整理的判断循环链表 (C语言如何应用快慢指针) ------- 算法笔记004全部内容,希望文章能够帮你解决判断循环链表 (C语言如何应用快慢指针) ------- 算法笔记004所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。