单向链表上的环有如下三种情况:
1:没有环
2:头尾相接
3:尾部next指向了中间任意节点
一般的做法是采用快慢指针。 即初始快慢节点指针都指向head, pSnow = pSnow->next;
pFast = pFast->next->next;
当if(pSnow == pFast) 即表示有环
代码实现如下:
xx* pSnow = head;
xx* pFast = head;
while(pFast) {
pSnow = pSnow->next;
pFast = pFast->next->next;
if(pSnow == pFast)
return true;
}
return false;
END