美文网首页
链表中环的入口节点

链表中环的入口节点

作者: 李伟13 | 来源:发表于2020-05-05 21:53 被阅读0次

    题目描述

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

    第一想法

    • 通过指针地址是否出现重复来判断.
    • key value对.
    AC代码
    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
     
    class Solution {
    public:
        ListNode* EntryNodeOfLoop(ListNode* pHead)
        {
            ListNode* p = pHead;
            map<ListNode* , int> m;
            while(p){
                if(++m[p] == 2)
                    return p;
                p = p -> next;
            }
            return p;
        }
    };
    

    看了讨论区

    通过快慢指针的形式

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
    
    class Solution {
    public:
        ListNode* EntryNodeOfLoop(ListNode* pHead)
        {
            ListNode *fast = pHead, *slow = pHead;
            while (fast && fast->next != NULL) {
                fast = fast->next->next;
                slow = slow->next;
                if (fast == slow) {
                    break;
                }
            }
            
            if (fast == NULL || fast->next == NULL) {
                return NULL;
            }
            
            fast = pHead;
            while (fast != slow) {
                fast = fast->next;
                slow = slow->next;
            }
            
            return fast;
        }
    };
    

    相关文章

      网友评论

          本文标题:链表中环的入口节点

          本文链接:https://www.haomeiwen.com/subject/bzhnwhtx.html