Entrada da lista de nós para provar oferta de segurança Central

título Descrição

Para uma lista ligada, em que se compreende o anel, encontrar o nó lista anel de entrada, de outro modo, nulo saídas.

pensamento

  1. Salvar o estabelecimento de um nó vector visitado, antes de cada vector iteração pressionado no novo nó, se for encontrado o mesmo nó é retornado, se não, em seguida, empurrou
  2. definir a velocidade, a partir da cabeça da lista de ponteiro são, cada ponteiro rapidamente tomar dois passos, um passo lento ponteiro, se houver um anel, o anel deve encontrar-se num ponto (Conclusão 1). Em seguida, deixar que os dois ponteiros são do ponto de encontro e a cabeça da lista, ambos os quais são substituídos cada intervalo de tempo, o anel, eventualmente, encontrar uma entrada (Conclusão 2).

código

Método um:

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étodo dois:

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;
    }
};
Publicado 85 artigos originais · ganhou elogios 0 · Visualizações 402

Acho que você gosta

Origin blog.csdn.net/weixin_38312163/article/details/104766170
Recomendado
Clasificación