链表中环的入口节点(NC3/考察次数Top17/难度中等)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表中环的入口节点(NC3/考察次数Top17/难度中等)相关的知识,希望对你有一定的参考价值。
描述:
对于一个给定的链表,返回环的入口节点,如果没有环,返回null
(题目来自牛客网)
用C++实现如下
/**
*
* struct ListNode { //链表结构,包含val和ListNode*
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
//是否有环,利用快慢指针法进行求解,顺便可以记录两指针相遇的位置
ListNode *slow=head;
ListNode *fast=head;
while(fast!=nullptr && fast->next!=nullptr) //如果头部为空,或者是走的过程中遇到空,则表示为空链表或者没环
{
fast=fast->next->next;
slow=slow->next; //快慢一起跑,快指针是每次走两步
if(fast==slow) //当两者相遇
{
ListNode* slow2=head; //新开一个慢指针从头部跑,两个慢指针会在环入口相遇
while(slow != slow2)
{
slow=slow->next;
slow2=slow2->next;
}
return slow; //返回相遇的节点即可
}
}
return nullptr;
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于链表中环的入口节点(NC3/考察次数Top17/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章