题目描述:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
说明:本题目包含复杂数据结构ListNode,点此查看相关信息
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
//链表为空
if(pHead == nullptr)
return nullptr;
ListNode* pSlow = pHead->next;
//单节点情况
if(pSlow == nullptr)
return nullptr;
ListNode* pFast = pSlow->next;
while(pFast - pSlow > 0 && pSlow != nullptr && pFast != nullptr)
{
pSlow = pSlow->next;
pFast = pFast->next;
}
//没有环的情况
if(pFast == nullptr)
return nullptr;
//返回环的入口节点
return pFast;
}
};