链表中环的入口节点(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/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章

面试题23:链表中环的入口节点

链表中环的入口节点

链表中环的入口结点

链表--链表中环的入口节点

链表中环的入口节点

剑指Offer对答如流系列 - 链表中环的入口节点