题目描述:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
解法1:借助unordered_map存储结构来分析
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
if(pHead==nullptr)return NULL;
unordered_map<ListNode* ,int>unmp;
while(pHead!=NULL){
unmp[pHead]++;
if(unmp[pHead]==2)return pHead;//根据哈希表的存储结构来分析,如果哈希表中有两个头节点,那么说明改哈希表节点中存在一个环
pHead=pHead->next;
}
return NULL;
}
};
解法2:快慢指针
class Solution {
public:
//快慢指针
ListNode* EntryNodeOfLoop(ListNode* pHead) {
ListNode* fast=pHead,*low=pHead;
while(fast&&fast->next){
fast=fast->next->next;
low=low->next;
if(fast==low)
break;
}
if(!fast||!fast->next)return NULL;
low=pHead;//low先出发
while(fast!=low){
fast=fast->next;
low=low->next;
}
return low;
}
};