//判断单链表中是否有环
/*
基本思想:用两个指针,pSlow和pFast,一个快一个慢。
慢的跳一次,快的跳两次。当快的追上慢的的时候就表示有环了
*/
struct listtype
{
int data;
struct listtype* next;
}list;
int find_circle(list *head){
list *pfast = head;
list *pslow = head;
//首先判断是不是空的链表
if (pfast == NULL)
return -1;
//当链表非空而且有一个节点的时候或者剩下当前的和之后的一个非空节点时
//pfast-next非空 保证pfast->next->next不会出现指向空指针的下一个的情况
while (pfast&&pfast->next)
{
pfast = pfast->next->next;
pslow = pslow->next;
if (pfast == pslow)
return 1;
}
return 0;
}
/*
调用函数返回1时,表示单向链表有环;
返回-1时,表示为空;
返回值为0时,表示单向链表无环。
*/
/*
基本思想:用两个指针,pSlow和pFast,一个快一个慢。
慢的跳一次,快的跳两次。当快的追上慢的的时候就表示有环了
*/
struct listtype
{
int data;
struct listtype* next;
}list;
int find_circle(list *head){
list *pfast = head;
list *pslow = head;
//首先判断是不是空的链表
if (pfast == NULL)
return -1;
//当链表非空而且有一个节点的时候或者剩下当前的和之后的一个非空节点时
//pfast-next非空 保证pfast->next->next不会出现指向空指针的下一个的情况
while (pfast&&pfast->next)
{
pfast = pfast->next->next;
pslow = pslow->next;
if (pfast == pslow)
return 1;
}
return 0;
}
/*
调用函数返回1时,表示单向链表有环;
返回-1时,表示为空;
返回值为0时,表示单向链表无环。
*/