题解 | #链表中环的入口结点#
链表中环的入口结点
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