跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

LeetCode 142. 环形链表 II(C 语言实现)

环形链表 II 问题旨在找到链表中环的入口节点。解决方案采用快慢指针法(Floyd 判圈算法)。首先通过快慢指针判断是否存在环,若相遇则存在环。随后利用数学推导,当快慢指针在环内相遇后,将其中一个指针重置至头结点,两指针以相同速度移动,再次相遇的点即为环的入口。该方法时间复杂度为 O(n),空间复杂度为 O(1)。

板砖工程师发布于 2026/3/23更新于 2026/6/1423 浏览
LeetCode 142. 环形链表 II(C 语言实现)

LeetCode 142. 环形链表 II

一、题目介绍

本题要求返回链表开始入环的第一个节点。如果链表无环,则返回 NULL。

二、题目详解

1. 审题

题目要求返回链表开始入环的第一个节点。首先需判断该链表是否为环形链表,如果不是,直接返回 NULL;若是环形链表,则需找出入环节点。

2. 判断是否为环形链表

(1)思路

如果链表不为环形链表,遍历链表一定会走到空指针。如果是环形链表,遍历将会陷入死循环。可以使用快慢指针法:一个快指针每次走 2 步,一个慢指针每次走 1 步。如果是环形链表,快指针最终会在环中追上慢指针;如果不是环形链表,快指针会先到达空指针。

(2)代码演示
struct ListNode* detectCycle(struct ListNode* head) {
    struct ListNode* fast = head;
    struct ListNode* slow = head;
    while (fast && fast->next) {
        fast = fast->next->next;
        slow = slow->next;
        if (fast == slow) {
            return findEntry(head, fast);
        }
    }
    return NULL;
}

3. 找到入环节点

(1)思路

已知是环形链表,如何找到入环节点? 设环的长度为 C,非环的长度为 L,相遇点与入环节点的距离为 N。

快指针走的总距离:L_fast = L + N + x * C (x 为 fast 走的圈数) 慢指针走的总距离:L_slow = L + N

因为 fast 速度是 slow 的两倍,所以 L_fast = 2 * L_slow。 代入得:L + N + x * C = 2 * (L + N) 化简得:x * C = N + L 变式得:(x - 1) * C + C - N = L

左式相当于一指针走了 (x-1) 圈再加上 C-N,右式就是头节点到入环节点的距离。因此,让一个指针 meet 从相遇点开始走,让一个指针 cur 从头节点开始走,当 meet 在环内走了 (x-1) 圈时,再走 C-N 距离就会与走了 L 距离的 cur 相遇。

(2)代码演示

创建 meet 和 cur,分别从相遇点和头节点开始以相同速度走,相遇点即为入环节点。

struct ListNode* findEntry(struct ListNode* head, struct ListNode* meet) {
    struct ListNode*  = head;
     () {
         (meet == cur) {
             meet;
        }
        meet = meet->next;
        cur = cur->next;
    }
}
cur
while
1
if
return

三、总结

通过快慢指针法可以高效解决环形链表问题。该方法时间复杂度为 O(n),空间复杂度为 O(1)。

目录

  1. LeetCode 142. 环形链表 II
  2. 一、题目介绍
  3. 二、题目详解
  4. 1. 审题
  5. 2. 判断是否为环形链表
  6. (1)思路
  7. (2)代码演示
  8. 3. 找到入环节点
  9. (1)思路
  10. (2)代码演示
  11. 三、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Stable Diffusion IP 海报生成流程与 LoRA 训练指南
  • 基于 Numpy 实现感知机模型构建与训练详解
  • 秋叶绘世 Stable Diffusion 整合包与 ComfyUI 环境说明
  • 亲测一个月后,我把所有 AI 工具全卸载了:Megick 专业图像视频生成,接入 GPT-Image-2 和 Seedance 后直接封神
  • RAG 实战:基于 Gradio 构建本地文件上传与对话 UI 界面
  • AIGC 降重实用软件推荐:免费与高性价比工具汇总
  • 大模型 SFT 的 100 个关键点:深入剖析与应用指南
  • 2026 年 3 月全球 AI 前沿动态与技术突破
  • 主流大模型架构全景:GPT、LLaMA、DeepSeek 与 Qwen 深度对比
  • 互联网大厂 Android 面试题大全与核心知识点解析
  • 使用 C++ 实现 2048 小游戏
  • Node.js 安装与环境配置实战指南
  • 2025 年 6 月 GESP 真题及题解 (C++ 七级): 选择题和判断题
  • Ollama 本地部署指南:支持多平台运行开源大模型
  • 2026 无人机 AI 算法全景:7 大场景与 50+ 核心算法
  • UZH RPG 组 AC-MPC:微分 MPC 赋能强化学习实现无人机竞速
  • 2023 年主流编程语言就业前景分析与学习指南
  • 2023 年数据分析职业发展与薪资前景分析
  • 企业级 AI Agent 全栈架构蓝图:从聊天机器人到智能自动化落地
  • 2025 年 AI 大模型发展趋势与企业应用展望

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online