#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Node
{
int data;
struct Node* next;
}*LinkList;
//尾插法随机生成20个数据
LinkList CreateListHead(LinkList L)
{
LinkList p,r;
srand(time(0));
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
r=L;
for(int i=0;i<10;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data=rand()%100+1;
r->next=p;
r=p;
}
r->next=L->next->next;
return L;
}
//判断单链表是否有环
int Listif(LinkList head)
{
LinkList p2;
p2=head->next; //p2指向第一个节点
int t1,t2; // t1为p1的步数,t2为p2的步数
t2=1;
while(p2)
{
LinkList p1;
p1=head;
t1=0;
while(p1)
{
if(p2==p1)
{
if(t1!=t2)
{
printf("第%d个有环",t1);
return 1;
}
else
{
p2=p2->next;
t2++;
break;
}
}
p1=p1->next;
t1++;
}
}
return 0; //无环
}
int main()
{
LinkList L,p;
int i;
p=L = CreateListHead(L);
for(int m=0;m<10;m++)
{
p=p->next;
printf("%d ",p->data);
}
if(!Listif(L))
printf("无环");
return 0;
}
C语言 判断单链表是否有环
最新推荐文章于 2023-11-27 21:36:31 发布