算法详解:如何判断链表中是否存在环(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)$,只使用了常数级别的额外空间。
总结
通过快慢指针法,我们可以高效地判断链表是否有环。这种方法不仅代码简洁,而且性能优秀,适合处理大规模数据。掌握快慢指针的思想对于解决类似的链表问题非常有帮助。
热门推荐
什么年龄更容易怀双胞胎?关于双胞胎的 10 个真相
写字楼出租税费如何计算?税费项目详解
“代理退保”产业链翻新套路,客户该如何应对?
头发怎么吹不会塌?教你四个技巧吹出蓬松自然的秀发
从开源贡献到实际应用:AI开源社区的创新动力与实践者成长
掌握反策划法,提升你的市场竞争力
大学生一个月花多少钱合适?专家:大学生要培养合理的消费观
曹叡与司马懿的权力博弈——个人能力与家族支持的双重保障
食用油可以反复加热吗?
边充电边玩手机的危害:电池老化、安全隐患与防护建议
双胞胎怎么形成的
宝马5系仪表盘故障灯详解:全面指示灯解读图集
爱因斯坦相对论的新研究发现:月球上的时间比地球过的更快
龋齿:它是什么,其原因是什么以及如何治疗?
社区老年人服务委员会职责与项目开发
权益牛熊,转债如何跟随正股?——转债策略系列报告之二
劳务派遣合同工的法律全解析:权利界定与风险防范
司马懿为什么会惧怕曹叡?
垂体瘤怎么检查才能确认出来?长大速度快不快?
股票什么公告 利好:股票市场中的利好公告分析
哪些动物是冷血动物?了解冷血动物的定义与特点
什么是意识模糊?症状、原因及诊断全解析
刷牙时牙齿出血是怎么回事?原因解析与应对策略
低脂食谱:那些让人惊艳的健康美食
苏式红汤面:江南风味的鲜香传奇
《春光乍泄》深度解析:两个男人的逃避与救赎
游戏帧率真的那么重要吗?揭秘画质对沉浸式体验的关键作用
甲减饮食指南:一周食谱与注意事项
(经济观察)中国工程机械企业海外本土化加速
这种癌,全球约一半患者在中国,广东潮汕地区尤为高发?