写一段代码判断一个单向链表中是否有环
思路: 用两个指针,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 }
调用函数返回值为1时,表示单向链表有环;调用函数返回值为-1时,表示测试的单向链表为空;
调用函数返回值为0时,表示单向链表无环;