算法详解:如何判断链表中是否存在环(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)$,只使用了常数级别的额外空间。
总结
通过快慢指针法,我们可以高效地判断链表是否有环。这种方法不仅代码简洁,而且性能优秀,适合处理大规模数据。掌握快慢指针的思想对于解决类似的链表问题非常有帮助。
热门推荐
辣椒蟹的养殖方法和注意事项
焦作什么沟,探寻中原山水之美,体验自然与文化交融的旅游胜地
菠菜中的草酸对人体有什么危害
云仓 ,快递提速“邮”高招
开户行行号和联行号一样吗
黄金价格创新高,但行情可能仍未结束
数学建模基础:数学建模概述
适合小学生学习的六种武术及其好处
CTR 或 CTOR?您必须跟踪的内容以及原因
云电话系统功能全解析:从呼叫处理到客户管理的全方位服务
my和mine的区别 二者有何不同
美国工会制度:历史、结构与挑战
万用表与L7的比较与应用(探究万用表和L7设备的性能差异及适用场景选择)
帝国的窗口:清代广州的十三行
分包在项目管理中是什么?如何有效选择和管理项目分包商?
如何实现资金的最优保值策略?这些策略的实际效果如何评估?
陕西“10大经典名菜”,都是秦菜精华,你吃过几道
客厅如何正确放置投影仪?最佳位置和角度是什么?
应力双折射检测:一种先进的材料应力分析技术
步入“下半场”,新能源汽车如何加速驶向智能化
基因检测有必要吗?这些人群最需要
梨花最晚又凋零,何事归期无定准。16句梨花古诗词,既漂亮又多情
种植蘑菇所需的设备和栽培方法
巴西5G网络信号覆盖率即将高达92%,通讯基础设施再升级
曾国藩的黑白人生:近三十而悟道,凡夫成“圣贤”
光学原理解析:如何挑选合适的望远镜
沿太子山旅游大通道,沿途皆是人间仙境
遁卦解析:隐退不是逃避,而是人生智慧
科创板开户条件详解:您需要了解的关键要素
银行数字化转型中的数据隐私与安全防护策略