算法详解:如何判断链表中是否存在环(C++实现)
创作时间:
作者:
@小白创作中心
算法详解:如何判断链表中是否存在环(C++实现)
引用
CSDN
1.
https://m.blog.csdn.net/Vitalia/article/details/146176116
141. Linked List Cycle
给定链表的头节点 head,判断链表中是否存在环。如果链表中存在环,则返回 true;否则返回 false。
链表中存在环的条件是:链表中某个节点的 next 指针可以指向链表中的任意节点,从而形成一个闭环。内部使用 pos 来表示尾节点的 next 指针连接到的节点的索引位置。需要注意的是,pos 不作为函数参数传递。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中存在环,尾节点的 next 指针指向了链表中的第 1 个节点(0 索引)。
示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中存在环,尾节点的 next 指针指向了链表中的第 0 个节点。
示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中不存在环。
问题描述
给定一个链表的头节点 head,判断链表中是否存在环。如果链表中存在环,则返回 true;否则返回 false。
解题思路
判断链表是否有环的经典方法是使用 快慢指针(Floyd’s Cycle Detection Algorithm),也称为龟兔赛跑算法。其核心思想是:
- 使用两个指针,一个快指针(每次走两步)和一个慢指针(每次走一步)。
- 如果链表中存在环,快指针最终会追上慢指针。
- 如果链表中不存在环,快指针会到达链表的末尾(
nullptr)。
C++ 代码实现
// 链表节点定义
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 判断链表是否有环
bool hasCycle(ListNode* head) {
if (!head || !head->next) {
return false; // 链表为空或只有一个节点,肯定无环
}
ListNode* slow = head; // 慢指针
ListNode* fast = head; // 快指针
while (fast && fast->next) {
slow = slow->next; // 慢指针走一步
fast = fast->next->next; // 快指针走两步
if (slow == fast) {
return true; // 快慢指针相遇,说明有环
}
}
return false; // 快指针到达链表末尾,说明无环
}
复杂度分析
- 时间复杂度:$O(n)$,其中 $n$ 是链表的节点数。
- 如果链表无环,快指针会遍历链表一次。
- 如果链表有环,快慢指针会在环内相遇,时间复杂度仍为 $O(n)$。
- 空间复杂度:$O(1)$,只使用了常数级别的额外空间。
总结
通过快慢指针法,我们可以高效地判断链表是否有环。这种方法不仅代码简洁,而且性能优秀,适合处理大规模数据。掌握快慢指针的思想对于解决类似的链表问题非常有帮助。
热门推荐
电脑无法启动怎么办?重装系统详细步骤指南
中芯国际火爆!大摩高盛目标价大相径庭,谁在说谎?
消化不良想呕吐要吃什么缓解
视频网站下载m3u8文件的方法,m3u8视频怎么转成mp4?简单3招
拍蒜比切蒜更香,跟两种物质有关!消除“蒜味口气”,试试这些食物……
《哪吒2》票房突破百亿 AI大模型赋能国漫革新
人机对决新篇章:AI技术如何颠覆传统玩家体验
中国香妆协会产业研究中心主任姚永斌:中国化妆品原料发展新路径思考
RPA终极发展方向:AI Agent的大语言模型挑战与行动
线上展览 | 榜样的力量——雷锋事迹与雷锋精神传承主题展
终于知道牵牛岗为什么不卖门票了,哪怕现在山顶有公厕又有观景台
睡觉后后背和小腿会出汗?医生为你详细解析原因
银行保函手续费一般是多少?
避坑指南!贴汽车隔热膜前必知的14条建议,老司机的宝贵经验
制冰机选购指南:从需求到品牌全方位解析
北京小学六年一学位政策公布!多区租房占学位!2025年入学家长速查
血常规检查单核细胞偏高是怎么回事
掌握这些软件测试需要的专业技能,让你的职业生涯更上一层楼!
初三语文中考复习计划的阶段性目标
解析INFP-T:含义、特点及与INFP-A的区别
如何防范信息泄露:个人与企业全方位防护指南
澳洲留学生能否合法摆摊经营
Steam十大剧情游戏推荐:从摄影解谜到狼人杀,总有一款触动你的心弦
2024年网络文学IP改编加速,番茄小说巅峰榜单揭晓,多形态内容跨界融合
探索自我:在快速变化时代找到人生定位的方法与思考
巴黎奥运会:塞尔维亚夺得铜牌,约基奇如何成为建队核心的理想配置?
坚守传统文化名人短篇事例
海通证券A股正式停牌:17年半上市历程落幕,合并重组进入关键阶段
警惕精神科药物导致的吞咽障碍,尤其老年人高发
精选金字旁女孩名字:寓意美好与光明