c语言快慢指针怎么用,判断循环链表 (C语言如何应用快慢指针) ------- 算法笔记004...

概念

94030d4493a08878981f4eca3208595c.png

快慢指针判断链表是否有环

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

#include

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

q=q->next;

}

p->next=q;

q=head->next;

free(head);

return q;

}

b222778dcfe9e164e9b23c78f45ef8bf.png

e1089cbef1b3fe9d76f1d8e0af658b17.png

Changlon

发布了32 篇原创文章 · 获赞 0 · 访问量 729

私信

关注

标签:head,slow,int,List,C语言,链表,004,quick,next

来源: https://blog.csdn.net/qq_35392733/article/details/104081031

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值