首先理清楚思路,如何判断一个链表是否带环。如果针对某一个已知的链表来说,我们很容易就可以判断是否是一个带环的链表,但这种方式并不通用。
于是我们采取一快一满两种指针的方式来对其进行判断,如果是一个带环链表的话,快指针必然会再次和慢指针相遇。
因此得到如下代码:
bool hasCycle(struct ListNode*head)
{
struct ListNode*slow,*fast;
slow=fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(slow==fast)
return true;
}
}