一、题目:
141.环形链表:
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos
是 -1
,则在该链表中没有环。
示例 1:
输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。
二、思路:
采用快慢指针,慢指针每次循环前进一个结点,快指针每次前进两个结点。判断如果快指针能和慢指针相遇,则链表有环。
三、代码(C++):
bool hasCycle(ListNode *head) {
ListNode *fast=head;
ListNode *slow=head; //开始时,快慢指针同时指向头结点
while(slow&&fast->next) //将对slow的判断放在对fast之前,避免头指针为空的情况
{
fast=fast->next->next;
if(fast==NULL) //fast前进两个结点,如果为空,则链表无环
return false;
slow=slow->next; //slow前进一个结点
if(fast==slow) //如果二者指向同一结点,则链表有环
return true;
}
return false; //循环条件不满足则链表无环
}