/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
#include <unordered_map>
class Solution {
public:
bool hasCycle(ListNode* head) {
if (head == nullptr)
return false;
ListNode* fast = head;
ListNode* slow = head;
while (fast->next && fast) {
if (fast->next)
slow = slow->next;
fast = fast->next->next;
if (fast == slow)
return true;
}
return false;
}
ListNode* EntryNodeOfLoop(ListNode* pHead) {
if(!hasCycle(pHead))
return nullptr;
unordered_map<ListNode*, int> mp;
while(1)
{
mp[pHead]++;
pHead=pHead->next;
for(auto& pair:mp)
{
if(pair.second==2)
return pair.first;
}
}
}
};