题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
#include <set>
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
std::set<ListNode*> s;
int len = s.size();
while (pHead != nullptr) {
s.insert(pHead);
if (len == s.size())
return pHead;
pHead = pHead->next;
len = s.size();
}
return nullptr;
}
};
利用了C++标准库容器set的不重复性来判断是否循环到了一个曾经出现过的节点。
如果插入了重复节点,那么set容器的大小不会改变,那么就可以判断此节点就是循环链表的第一个节点,返回其地址即可。
如果没有插入重复节点,那么就返回NULL

