题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
//入口结点,也就是循环一次链表,出现的第一个重复节点,利用地址的唯一性,
//创建一个set,每次遍历next结点都插入一次,直到某次set的值不再增加,说明
//本结点就是第一个重复节点,即链表环的入口
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead==NULL)return NULL;
set<ListNode*> the_set;
int mark_size=0;
while(pHead!=NULL)
{
mark_size=the_set.size();
the_set.insert(pHead);
if(mark_size==the_set.size())return pHead;
pHead=pHead->next;
}
return NULL;
}
};