C++每日一练12.链表中环的入口结点

Posted 鱼酱2333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++每日一练12.链表中环的入口结点相关的知识,希望对你有一定的参考价值。

给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。

数据范围: n≤10000,1<=结点值<=100001<=结点值<=10000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

方法一:哈希法

class Solution 
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    
        unordered_set<listnode*> st;
        while (pHead) 
            if (st.find(pHead) == st.end()) 
                st.insert(pHead);
                pHead = pHead->next;
            
            else 
                return pHead;
            
        
        return nullptr;
    
;

双指针法

class Solution 
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) 
        ListNode* slow = pHead; // 定义两个指针
        ListNode* fast = pHead;
        while(fast!=NULL&&fast->next!=NULL)
            fast=fast->next->next; //fast指针走两步
            slow=slow->next;  // slow指针走一步
            if(slow==fast)  //找到了相遇点
                while(pHead!=slow)  //不断往前走
                    pHead=pHead->next;
                    slow=slow->next;
                
                return pHead;
            
        
        return NULL;
    
;

以上是关于C++每日一练12.链表中环的入口结点的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer(C++)-JZ23:链表中环的入口结点(数据结构-链表)

剑指offer-链表中环的入口结点

53链表中环的入口结点

55 链表中环的入口结点

链表中环的入口结点

链表中环的入口结点