#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct lnode
{
int data;
struct lnode* next;
}*link,node;
void creatCirculate(link &l,int m)
{
link q=(link)malloc(sizeof(node));
l->next=q;
for(int i=0;i<m;i++)
{
int a;
q->data=i;
q->next=(link)malloc(sizeof(node));
q=q->next;
}
q->next=l->next->next;//尾部指向头的下下一个,建立环
}
void create(link &l,int m)
{
link q=(link)malloc(sizeof(node));
l->next=q;
for(int i=0;i<m;i++)
{
int a;
q->data=i;
q->next=(link)malloc(sizeof(node));
q=q->next;
}
q->next=NULL;//无环链表
}
void judge(link l)
{
int flag=0;
link p1,p2;
p1=p2=l->next;
while(p1!=NULL&&p2!=NULL&&p2->next!=NULL)
{
p2=p2->next->next;
p1=p1->next;//两个指针一快一慢,若存在环则必存在两指针相遇
if(p1==p2)
{
flag=1;
cout<<"该链表存在环"<<endl;
return;
}
}
if(flag==0)
cout<<"该链表没有环"<<endl;
}
main()
{
link l1,l2;
l1=(link)malloc(sizeof(node));
l2=(link)malloc(sizeof(node));
creatCirculate(l1,5);
create(l2,5);
judge(l1);
judge(l2);
}
#include<stdlib.h>
using namespace std;
typedef struct lnode
{
int data;
struct lnode* next;
}*link,node;
void creatCirculate(link &l,int m)
{
link q=(link)malloc(sizeof(node));
l->next=q;
for(int i=0;i<m;i++)
{
int a;
q->data=i;
q->next=(link)malloc(sizeof(node));
q=q->next;
}
q->next=l->next->next;//尾部指向头的下下一个,建立环
}
void create(link &l,int m)
{
link q=(link)malloc(sizeof(node));
l->next=q;
for(int i=0;i<m;i++)
{
int a;
q->data=i;
q->next=(link)malloc(sizeof(node));
q=q->next;
}
q->next=NULL;//无环链表
}
void judge(link l)
{
int flag=0;
link p1,p2;
p1=p2=l->next;
while(p1!=NULL&&p2!=NULL&&p2->next!=NULL)
{
p2=p2->next->next;
p1=p1->next;//两个指针一快一慢,若存在环则必存在两指针相遇
if(p1==p2)
{
flag=1;
cout<<"该链表存在环"<<endl;
return;
}
}
if(flag==0)
cout<<"该链表没有环"<<endl;
}
main()
{
link l1,l2;
l1=(link)malloc(sizeof(node));
l2=(link)malloc(sizeof(node));
creatCirculate(l1,5);
create(l2,5);
judge(l1);
judge(l2);
}