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