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