题目:判断单链表是否为循环链表(判断链表中是否存在环)
分析:使用快慢2个指针,2个指针都从链表头开始遍历,快指针每次移动2个结点,满指针每次移动1个结点。若链表中存在环,则快慢2指针后在链表的某一位置相遇,否则她们不会相遇。
typedef struct Lnode
{
int data;
struct Lnode *next;
}*Linklist;
//检测单链表是否为循环链表或链表中是否存在环
int findloop(Linklist *L)
{
Linklist fast,slow;
if(NULL == L)
{
printf("input error!\n");
return -1;
}
fast = slow = L;
while(1)
{
if(NULL == fast->next)
return -1;
else if((fast == slow) || (fast->next == slow))
return 0;
else
{
fast = fast->next->next;
slow = slow->next;
}
}
}