目录
题目:
示例:
分析:
代码:
题目:
示例:
分析:
题目给我们一个链表,让我们判断这个链表是否有环。我们可以直接遍历这个链表,最后能走到链表末尾也就是空指针那就代表这个链表没有环,如果一直死循环在走,那么就说明我们陷入环了。
当然,我们不可能这么做,不可能每次判断一个链表有概率让我们的程序陷入死循环,那么我们应该怎么做呢。
其实这是很经典的快慢指针题。我们需要定义两个指针来遍历这个链表,其中一个快指针比慢指针每次多走一次,如果快指针走到了链表末尾,那么就没有环。如果链表有环,那么因为快指针移动比慢指针多,因此他们最终会相遇,快慢指针相遇则表示链表有环。
一道经典的题目,如果是刚接触的小白可能会没什么头绪,不过再照着下面的动图和代码再理解理解就好啦。
代码:
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head==nullptr) return false;
ListNode* fast=head;
ListNode* slow=head;
fast=fast->next;
while(fast!=nullptr){
if(fast==slow) return true;
slow=slow->next;
fast=fast->next;
if(fast!=nullptr) fast=fast->next;
}
return false;
}
};