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

环形链表(LeetCode 141)C语言最佳解题思路

环形链表(LeetCode 141)C语言解题思路

问题描述

判断一个链表中是否存在环。

解题方法:快慢指针法

使用两个指针,一个快指针(每次移动两步),一个慢指针(每次移动一步)。如果链表中存在环,快指针最终会追上慢指针;如果不存在环,快指针会先到达链表尾部。

代码实现
#include <stdbool.h> // 链表节点结构体定义(题目自带) struct ListNode { int val; struct ListNode *next; }; // 主函数:判断链表是否有环 bool hasCycle(struct ListNode *head) { // 边界1:空链表 / 只有单个节点无后继,直接无环 if (head == NULL || head->next == NULL) { return false; } // 初始化快慢指针,起点都为头节点 struct ListNode *slow = head; struct ListNode *fast = head; // 循环条件:fast和fast->next不能为NULL(fast一次走两步,防止空指针访问) while (fast != NULL && fast->next != NULL) { slow = slow->next; // 慢:走1步 fast = fast->next->next; // 快:走2步 // 快慢指针相遇,证明存在环 if (slow == fast) { return true; } } // 循环正常退出说明fast走到链表末尾NULL,无环 return false; }
代码讲解
  1. 边界条件检查

    • 如果链表为空(head == NULL)或只有一个结点(head->next == NULL),直接返回false,因为无法形成环。
  2. 初始化指针

    • slow指针初始化为head,每次移动一步。
    • fast指针初始化为head->next,每次移动两步。
  3. 循环检测

    • while循环中,判断slowfast是否相遇。
    • 如果fastfast->nextNULL,说明链表无环,返回false
    • 每次循环中,slow移动一步,fast移动两步。
  4. 返回结果

    • 如果slowfast相遇,说明链表有环,返回true
复杂度分析
  • 时间复杂度:O(n)
    • 无环时,快指针最多遍历链表一次。
    • 有环时,快慢指针会在环内相遇,时间复杂度为O(n)。
  • 空间复杂度:O(1)
    • 仅使用了两个指针,空间复杂度为常数。
http://www.gsyq.cn/news/1625454.html

相关文章:

  • TVA在具身智能技术演进中的独特价值(5)
  • ML模型服务化实战:从Notebook到高稳生产环境
  • SQL注入攻防体系构建:从原理到实战的全面指南
  • Python图片处理:基于Gradio构建启动后在浏览器打开交互界面,支持上传图片、自由拖拽4个顶点实现任意角度拉伸压缩、并添加文字
  • 【Java毕业设计】基于 SpringBoot 的企业员工薪酬绩效统计分析系统的设计与实现 基于 SpringBoot 的一体化员工人事薪资合同管理系统(源码+文档+远程调试,全bao定制等)
  • 艺术涂料刷涂工艺?一次说到位
  • AI落地漏斗:从POC到规模化ROI的工程化实践指南
  • Autoware与Apollo开源自动驾驶平台核心对比
  • 电驱蚊器有毒吗?最先进的灭蚊神器是什么牌子?十款质量不错灭蚊器榜单对比实测! 避坑贴!
  • HS2-HF Patch:一站式解决Honey Select 2汉化、去码与插件管理的终极方案
  • 从 ASCII 到 UTF-8:一部字符集的发展史
  • 从Notebook到生产环境的ML模型落地实战指南
  • VirtualAPK插件化安全加固:从DEX加密到函数抽取的纵深防御实践
  • 软件审计风暴下,企业如何用自动化工具守住合规底线?
  • 【全英文期刊收集】
  • 三步永久保存微信聊天记录:WeChatMsg让你的数字记忆永不丢失
  • Claude API 销售话术优化:从客户异议到成交建议
  • DRG存档编辑器:5分钟掌握《深岩银河》游戏数据修改技巧
  • 线性回归实战:从最小二乘到残差诊断与模型解释性
  • Casdoor实战:从统一身份认证到AI网关的部署与集成指南
  • Navicat Mac版无限试用重置终极指南:三种免费方法快速恢复14天试用期
  • Coze平台AI智能体开发实战:从角色定义到多智能体协作
  • Linux 文件查找练习
  • Python接口自动化:从Requests、Pytest到Allure的完整框架搭建指南
  • Java毕设选题推荐:基于 SpringBoot 的垃圾分类宣传与智能监管系统的设计与实现 基于 SpringBoot 的社区垃圾投放记录统计分【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕业设计-基于 SpringBoot 的斯诺克球馆购票系统的设计与实现 基于 SpringBoot 的台球球馆在线预订购票管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • Java毕设项目:基于 SpringBoot 的摄影社团作品点评与互动管理系统的设计与实现 基于 SpringBoot 的高校社团摄影资源共享管理系统 (源码+文档,讲解、调试运行,定制等)
  • wiz2025 挑战赛从 springActuator 泄露到 s3 敏感文件获取全解析
  • 深度拆解!海底捞火锅店出现的新型买单方式:扫盘子结算收款!
  • Java毕设项目:基于 SpringBoot 的绿色社区垃圾分类综合服务系统的设计与实现 基于 SpringBoot 的垃圾站点设备运维与分类监管系统 (源码+文档,讲解、调试运行,定制等)