思路:
用两个指针,pSlow,pFast,就是一个慢一个快
慢的一次跳一步,
快的一次跳两步,
什么时候快的追上慢的了就表示有环(pSlow == pFast )。
实现如下:
struct listtype
{
int data;
struct listtype * next;
}list;
int find_cicle(list *head)
{
list *pFast=head;
list *pSlow=head;
if (pFast==NULL)
{
return -1;
}
while(pFast && pFast->next)
{
pFast=pFast->next->next;
pSlow=pSlow->next;
if (pFast==pSlow)
{
return 1;
}
}
return 0
}