#include<stdio.h>
#include<stdlib.h>
struct linknode
{
int data;
linknode *next;
};
int judge(linknode *head)
{
linknode *p1 = head;
linknode *p2 = head;//慢指针一次走一步,快指针一个走两步
while((p1->next!=NULL)&&(p2->next!=NULL)&&(p2->next->next!=NULL))
{
p1 = p1->next;
p2 = p2->next->next;
if(p1 == p2)//如果两指针相遇,则存在环
{
return 1;
}
}
return 0;
}
int main()
{
linknode *head = new linknode;
linknode *mhead = head;
for(int i = 0;i<10;i++)//构造链表
{
linknode *node = new linknode;
mhead->next = node;
mhead = node;
}
mhead->next = head;//尾节点指向头结点
if(judge(head))
printf("存在环");
system("pause");
return 0;
}
#include<stdlib.h>
struct linknode
{
int data;
linknode *next;
};
int judge(linknode *head)
{
linknode *p1 = head;
linknode *p2 = head;//慢指针一次走一步,快指针一个走两步
while((p1->next!=NULL)&&(p2->next!=NULL)&&(p2->next->next!=NULL))
{
p1 = p1->next;
p2 = p2->next->next;
if(p1 == p2)//如果两指针相遇,则存在环
{
return 1;
}
}
return 0;
}
int main()
{
linknode *head = new linknode;
linknode *mhead = head;
for(int i = 0;i<10;i++)//构造链表
{
linknode *node = new linknode;
mhead->next = node;
mhead = node;
}
mhead->next = head;//尾节点指向头结点
if(judge(head))
printf("存在环");
system("pause");
return 0;
}