📜  数据结构 |链表 |问题 9(1)

📅  最后修改于: 2023-12-03 14:54:56.411000             🧑  作者: Mango

数据结构 | 链表 | 问题 9

问题描述

给定一个链表,判断该链表是否存在环。

解决方法
解决思路

使用快指针和慢指针。

快指针每次走两步,慢指针每次走一步。如果链表中存在环,那么快指针和慢指针一定会在某个时刻相遇。

解决步骤
  1. 定义一个快指针,一个慢指针,指向链表的头节点。
  2. 使用 while 循环遍历链表,快指针每次走两步,慢指针每次走一步,如果链表存在环,则它们会在某个时刻相遇。
  3. 如果相遇,则说明链表存在环。如果没有相遇,则说明链表不存在环。
代码演示
public boolean hasCycle(ListNode head) {
    // 定义快指针和慢指针
    ListNode fast = head;
    ListNode slow = head;
    // 遍历链表,如果存在环,则快指针和慢指针会相遇
    while (fast != null && fast.next != null) {
        fast = fast.next.next; // 快指针每次走两步
        slow = slow.next; // 慢指针每次走一步
        if (fast == slow) { // 如果快指针和慢指针相遇,说明链表存在环
            return true;
        }
    }
    // 如果快指针和慢指针没有相遇,说明链表不存在环
    return false;
}
总结

本文介绍了如何使用快指针和慢指针来判断链表中是否存在环。这是链表问题中比较常见的问题之一,学好了这个问题,可以为解决其他有关链表的问题打下坚实的基础。