题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
// // 先快慢节点找有没有环
// ListNode* slow = pHead;
// ListNode* fast = pHead;
// while(slow!=nullptr && fast!=nullptr && fast->next!=nullptr){
// slow = slow ->next;
// fast = fast ->next ->next;
// // 找到环去找初始结点,这里可以计算有点烧脑
// if(fast == slow){
// fast = pHead;
// while(fast!=slow){
// fast = fast->next;
// slow = slow->next;
// }
// return slow;
// }
// }
// return nullptr;
// 利用哈希表
unordered_set<ListNode*> node_set;
while (pHead != nullptr) {
// ==end()表示迭代超出尾部都没找到
if (node_set.find(pHead) != node_set.end()) {
return pHead;
}
// 没找到则插入该结点进哈希表
node_set.insert(pHead);
pHead = pHead->next;
}
return nullptr;
}
};