单链表有环,是指单链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形成一个环形结构。
判断一个链表是否有环,通常使用快慢指针的方法,也就是说一个每次指针走两步,一个指针每次只走一步,如果链表有环,则两个指针总会在一个节点上相遇,若无环,则不会相遇。
代码实现如下:
#include<iostream>
using namespace std;
typedef struct node
{
int value;
struct node *next;
}*Linklist;
int HasCycle(Linklist head)
{
Linklist p;
p = head;
while(p != NULL && p->next != NULL)
{
p = p->next->next;
head = head->next;
if(p == head) return 1;
}
return 0;
}