题解 | #链表中环的入口结点#

链表中环的入口结点

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;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务