Entrée de la liste des noeuds pour prouver l'offre de sécurité centrale

Titre description

Pour une liste liée, dans lequel si le cycle comprend, de trouver la liste de noeuds d'anneau d'entrée, sinon, null sorties.

pensée

  1. Enregistrer la mise en place d'un noeud vecteur visité, avant chaque vecteur d'itération enfoncé dans le nouveau noeud, se trouve le même nœud est retourné, sinon, poussé
  2. vitesse réglage pointeur, à partir de la tête de la liste sont, chaque pointeur de prendre rapidement en deux étapes, une étape lente de pointeur, s'il y a un anneau, l'anneau doit répondre à un point (Conclusion 1). Ensuite, laissez les deux pointeurs sont du point de rencontre et la tête de la liste, tous deux sont remplacés chaque pas de temps, l'anneau éventuellement rencontrer une entrée (Conclusion 2).

code

Première méthode:

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

Méthode Deux:

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;
    }
};
Publié 85 articles originaux · louanges gagnées 0 · Vues 402

Je suppose que tu aimes

Origine blog.csdn.net/weixin_38312163/article/details/104766170
conseillé
Classement