【力扣每日一题】2023.7.29 环形链表

目录

题目:

示例:

分析:

代码:


题目:

【力扣每日一题】2023.7.29 环形链表_第1张图片

示例:

【力扣每日一题】2023.7.29 环形链表_第2张图片

分析:

 题目给我们一个链表,让我们判断这个链表是否有环。我们可以直接遍历这个链表,最后能走到链表末尾也就是空指针那就代表这个链表没有环,如果一直死循环在走,那么就说明我们陷入环了。

当然,我们不可能这么做,不可能每次判断一个链表有概率让我们的程序陷入死循环,那么我们应该怎么做呢。

其实这是很经典的快慢指针题。我们需要定义两个指针来遍历这个链表,其中一个快指针比慢指针每次多走一次,如果快指针走到了链表末尾,那么就没有环。如果链表有环,那么因为快指针移动比慢指针多,因此他们最终会相遇,快慢指针相遇则表示链表有环。

一道经典的题目,如果是刚接触的小白可能会没什么头绪,不过再照着下面的动图和代码再理解理解就好啦。

【力扣每日一题】2023.7.29 环形链表_第3张图片

代码:

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;
    }
};

你可能感兴趣的:(力扣每日一题,leetcode,链表,算法,c++,数据结构)