定个小目标之刷LeetCode热题(20)

这题与上一题有一点不同,上一题是判断链表是否存在环,这题是寻找入环的第一个节点,有一个规则是这样的,在存在环的情况下,运用快慢指针判断是否有环结束时,把快指针指向头结点,慢指针不变,然后循环快慢指针每次只走一步,最终会在入环的第一个节点相遇,代码如下

java 复制代码
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if (head == null || head.next == null) {
            return null;
        }
        ListNode slow = head, fast = head;
        while (fast != null) {
            slow = slow.next;
            if (fast.next != null) {
                fast = fast.next.next;
            } else {
                return null;
            }
            // 如果在快慢指针规则移动指针存在slow == fast说明存在环
            if (slow == fast) {
                // 此时需要寻找入环的第一个节点,将fast指向头节点
                fast = head;
                // 然后快指针和慢指针各移动一次,最终会在入环的第一个节点相遇
                while (slow != fast) {
                    slow = slow.next;
                    fast = fast.next;
                }
                return fast;
            }
        }
        return null;
    }
}

题目链接:题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台

相关推荐
鱼子星_12 小时前
【数据结构与算法】数据结构基础——树(上):树的存储结构,满二叉树,完全二叉树,二叉树的存储结构
c语言·数据结构·算法
ychqsq12 小时前
32.夏日访客
经验分享·职场和发展
凯瑟琳.奥古斯特12 小时前
原码与补码乘法符号位处理差异
java·开发语言·职场和发展
高级c12 小时前
MindIE 推理引擎架构解析
深度学习·算法·架构·cann
奶人五毛拉人一块12 小时前
滑动窗口算法及习题讲解
数据结构·算法·滑动窗口·子数组
菜菜的顾清寒12 小时前
力扣HOT100(28)两数相加
算法·leetcode·职场和发展
搬砖魁首12 小时前
基础能力系列 - 多线程1 - 内存序
算法·内存序·memory order
pursuit_csdn12 小时前
力扣周赛 503
java·算法·leetcode
sheeta199812 小时前
LeetCode 每日一题笔记 日期:2026.05.21 题目:3043. 最长公共前缀的长度
笔记·算法·leetcode
我爱cope12 小时前
【Agent智能体3 | 智能体AI的优势】
人工智能·职场和发展