题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
解题思路
利用一个std::set
判重即可,第一次重复的,肯定是环的入口节点。
AC代码
/*
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;
}
auto it = pHead;
addrSet.insert(it);
while (it != nullptr) {
if (it->next != nullptr) {
auto node = addrSet.find(it->next);
if (node == addrSet.end()) {
addrSet.insert(it->next);
} else {
return *node;
}
}
it = it->next;
}
return nullptr;
}
std::set<ListNode*> addrSet;
};