当前位置: 首页 > article >正文

LeetCode 解题思路 13(Hot 100)

在这里插入图片描述

解题思路:

  1. 初始化两个指针: slow 和 fast,均指向链表头节点 head。
  2. 遍历链表: slow 每次移动一步,fast 每次移动两步。
  3. 判断条件: 如果 fast 或 fast.next 为 null,说明链表无环,返回 false;如果 slow 和 fast 相遇,说明链表有环,返回 true。

Java代码:

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

复杂度分析:

  • 时间复杂度: O(n),其中 n 是链表长度。最坏情况下,快指针遍历完整个链表。
  • 空间复杂度: O(1),仅使用两个额外指针。

在这里插入图片描述

解题思路:

  1. 判断是否有环: 使用快慢指针(快指针每次移动两步,慢指针每次移动一步)遍历链表。如果快指针追上慢指针,则说明存在环。
  2. 确定环的入口: 将慢指针重置到链表头,快指针保持在相遇点。此时,两个指针以相同速度移动,再次相遇的节点即为环的入口。

Java代码:

public class Solution {
    public ListNode detectCycle(ListNode head) {
        if (head == null || head.next == null) {
            return null;
        }
        
        ListNode slow = head;
        ListNode fast = head;
        
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) {
                break;
            }
        }
        
        if (fast == null || fast.next == null) {
            return null;
        }
        
        slow = head;
        while (slow != fast) {
            slow = slow.next;
            fast = fast.next;
        }
        
        return slow;
    }
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是链表长度。快指针最多遍历链表两次(第一次找相遇点,第二次找入口)。
  • 空间复杂度: O(1),仅使用两个额外指针(slow 和 fast)。

http://www.kler.cn/a/577073.html

相关文章:

  • 【后端开发面试题】每日 3 题(八)
  • ‌工业智能网关,七大领域驱动数智化升级
  • 使用 ResponseBodyEmitter 实现异步响应式数据流处理
  • Intent3D
  • 《实战AI智能体》Deepseek可以做什么?自然语言理解与分析
  • 计算机网络——交换机
  • golang坐标转换 gomap3d库
  • Flink之Barrier对齐会影响执行效率,怎么跳过Barrier对齐,跳过后还能保证‌Exactly-Once语义吗?
  • 阿里云服务器监控
  • UniApp 运行的微信小程序如何进行深度优化
  • MapReduce:分布式计算的基石
  • Django模型使用和前后端交互
  • 每天五分钟深度学习PyTorch:向更深的卷积神经网络挑战的ResNet
  • Android 检查更新
  • 如果布隆过滤器挂了,里边存的数据全丢失了,怎么恢复呢?
  • Jmeter进行http接口测试详解
  • Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的应用(120)
  • C语言基础系列【20】内存管理
  • Pico 4 Enterprise(企业版)与Unity的交互-打包运行及UI交互篇
  • C++25--lambda表达式