给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos
是 -1
,则在该链表中没有环。
解题思路:利用快慢指针的方法,满指针每次走一步,快指针每次走两步,如果链表有环,快慢指针一定会相遇。
需要想明白的是相遇时两个指针走的次数只与链表的原本长度有关,与链表的环连接到哪一个节点无关。
bool Solution::hasCycle(ListNode *head)
{
ListNode *pslow = head;
ListNode *pfast = head;
if((head == NULL) || (head->next == NULL))
{
return false;
}
while((pfast != NULL) && (pfast->next != NULL))
{
pslow = pslow->next;
pfast = pfast->next->next;
if(pslow == pfast)
{
return true;
}
}
return false;
}