Leetcode--141. 环形链表
发布日期:2021-04-30 21:04:55 浏览次数:65 分类:精选文章

本文共 963 字,大约阅读时间需要 3 分钟。

为了判断给定链表是否存在环,我们可以使用快慢指针法。这种方法在O(n)时间复杂度和O(1)空间复杂度下解决问题,非常高效。

方法思路

快慢指针法的基本思路是使用两个指针,一个快指针和一个慢指针。快指针每次移动两步,慢指针每次移动一步。当链表没有环时,快指针会最终追上慢指针,说明没有环。当链表有环时,快指针会比慢指针多绕一圈,最终在环的某个点相遇。

具体步骤如下:

  • 初始化慢指针和快指针,分别指向链表的头节点和下一个节点。
  • 使用循环,直到慢指针和快指针相遇或无法继续移动。
  • 在每次循环中,检查快指针是否已经超出链表长度,如果超出,说明没有环。
  • 当慢指针和快指针相遇时,说明存在环。
  • 解决代码

    public class Solution {
    public boolean hasCycle(ListNode head) {
    if (head == null || head.next == null) {
    return false;
    }
    ListNode slow = head;
    ListNode fast = head.next;
    while (slow != fast) {
    if (fast.next == null || fast.next.next == null) {
    return false;
    }
    slow = slow.next;
    fast = fast.next.next;
    }
    return true;
    }
    }

    代码解释

  • 初始化检查:首先检查链表是否为空或只有一个节点,没有环的情况,直接返回false。
  • 指针初始化:慢指针slow和快指针fast分别指向链表的头节点和下一个节点。
  • 循环过程
    • 检查快指针是否已经超出链表长度,如果超出,返回false。
    • 慢指针移动一步,快指针移动两步。
  • 相遇判断:当慢指针和快指针相遇时,说明存在环,返回true。
  • 这种方法确保了在O(n)时间复杂度和O(1)空间复杂度下高效地解决问题。

    上一篇:题目 1048: 自定义函数之字符串拷贝 题解
    下一篇:maven本地上传jar包到私服库

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2026年06月04日 04时24分03秒