【leetcode面试经典150题】57. 环形链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)

【题目描述】

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

【示例一】

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

【示例二】

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

【示例三】

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

【提示及数据范围】

  • 链表中节点的数目范围是 [0, 10的4次方]
  • -10的5次方 <= Node.val <= 10的5次方
  • pos 为 -1 或者链表中的一个 有效索引 。

【代码】

// 方法一:哈希表

class Solution {
public:
    bool hasCycle(ListNode *head) {
        unordered_set<ListNode*> seen;
        while (head != nullptr) {
            if (seen.count(head)) {
                return true;
            }
            seen.insert(head);
            head = head->next;
        }
        return false;
    }
};

// 方法二:快慢指针

class Solution {
public:
    bool hasCycle(ListNode* head) {
        if (head == nullptr || head->next == nullptr) {
            return false;
        }
        ListNode* slow = head;
        ListNode* fast = head->next;
        while (slow != fast) {
            if (fast == nullptr || fast->next == nullptr) {
                return false;
            }
            slow = slow->next;
            fast = fast->next->next;
        }
        return true;
    }
};

相关推荐

  1. leetcode面试经典15056. 基本计算器(C++)

    2024-04-22 20:52:05       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 20:52:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 20:52:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 20:52:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 20:52:05       20 阅读

热门阅读

  1. 4.15 day6 ARM

    2024-04-22 20:52:05       17 阅读
  2. pytorch 多进程数据加载 - 序列化数据/serialize_data

    2024-04-22 20:52:05       14 阅读
  3. ERESOLVE overriding peer dependency npm install错误

    2024-04-22 20:52:05       14 阅读
  4. ChatGPT改写:论文写作新时代

    2024-04-22 20:52:05       16 阅读