题目描述
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead==NULL) return NULL;
ListNode* fast=pHead;
ListNode* slow=pHead;
ListNode* met=NULL;
while(fast)
{
fast=fast->next;
slow=slow->next;
if(fast==NULL)
{
return NULL;
}
fast=fast->next;
if(fast==slow)
{
met=fast;
break;
}
}
if(met)
{
slow=pHead;
while(met!=slow)
{
slow=slow->next;
met=met->next;
}
return met;
}else
{
return NULL;
}
}
};
本文介绍了一种通过快慢指针法找到链表中环的入口节点的方法。使用两个速度不同的指针遍历链表,当它们首次相遇时,重新设置一个指针到头结点并保持相同速度前进,再次相遇的节点即为环的入口。
123

被折叠的 条评论
为什么被折叠?



