/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
ListNode *slow=pHead, *fast=pHead, *iter = pHead,*next;
bool is_ring = false;
if(pHead->next==nullptr||pHead->next==nullptr||pHead->next->next==nullptr) return nullptr;
fast = pHead->next->next;
while(slow&&fast->next&&fast->next->next){
if(slow==fast) {
is_ring = true;
break;
}
slow = slow->next;
fast = fast->next->next;
}
if(is_ring==false) return nullptr;
//上面代码判断是否有环,如果没有环,那么一定没有环的入口节点,返回nullptr
//然后判断入口节点,思路是一个一个断开节点,那么断到最后的节点就是入口节点。
//缺点是破坏了原链表,不知道算不算作弊
next = pHead->next;
while(next){
iter->next = nullptr;
iter = next;
next = next->next;
}
return iter;
}
};