题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
思路:之前写过判断链表是否有环,弄个快慢指针,如果会相遇,则认为有环,
这里如果有环要找出环的入口,要推一下
根据这个思路写代码
/*
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 * f = pHead;
ListNode * l = pHead;
bool flag = false;
while(l->next)
{
l = l->next;
l = l->next;
f = f->next;
if(l==f)
{
flag = true;
break;
}
}
if(!flag) return NULL;//无环返回NULL
else{//有环
f = pHead;
while(f!=l)
{
f = f->next;
l = l->next;
}
return f;
}
}
};