安全のオファーCentralを証明するためにノードリストのエントリー

タイトル説明

リング含む場合、エントリのリングノードリストを見つける前記リンクされたリストに、そうでなければ、NULLを出力します。

思考

  1. 訪問したベクトルノードの確立保存、前各反復ベクトルに同じノードが返された場合は、新しいノードに押され、そうでない場合は、その後、プッシュ
  2. 環が存在する場合、各ポインタはすぐ2つのステップを取る、リストの先頭から開始し、ポインタ遅い工程速度を設定しているポインタは、リングは、点(結論1)で満たさなければなりません。次に、2つのポインタがミーティングポイントからのものであり、各時間ステップに置き換えられどちらもリストの先頭は、リングは、最終的にインレット(結論2)を発生してみましょう。

コード

この方法の一つ:

class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
        vector<ListNode*> v;
        if(pHead == NULL)
            return NULL;
        v.push_back(pHead);
        pHead = pHead->next;
        while(pHead != NULL)
        {
            for(int i = 0; i < v.size();i++)
            {
                if(pHead == v[i])
                    return pHead;
            }
            v.push_back(pHead);
            pHead = pHead->next;
        }
        return NULL;
    }
};

方法2:

class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
        ListNode*fast=pHead,*low=pHead;
        while(fast&&fast->next){
            fast=fast->next->next;
            low=low->next;
            if(fast==low)
                break;
        }
        if(!fast||!fast->next)return NULL;
        low=pHead;//low从链表头出发
        while(fast!=low){//fast从相遇点出发
            fast=fast->next;
            low=low->next;
        }
        return low;
    }
};
公開された85元の記事 ウォンの賞賛0 ビュー402

おすすめ

転載: blog.csdn.net/weixin_38312163/article/details/104766170