Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida na inserção de celulas(Lista Duplamente Ligadas)

Olá Bom dia, eu tenho uma duvida sobre as listas duplamente ligadas, quando eu adiciono uma celula a lista se o totalDeElementos for 0 ele cria uma uma celula e o proximo recebe null e entao setamos o primeiro e ultimo como nova, porem quando totalDeElementos for maior que 0, criamos uma celula passando o elemento e o primeiro(que é a referencia a ultima celula inserida) entao setamos a anterior e depois dizemos que o primeiro é igual a nova celula segue o codigo

        if(this.totalDeElementos == 0) {
            Celula nova = new Celula(elemento);

            this.primeiro = nova;
            this.ultima = nova;
            // ate aqui tudo ok, pois estaos adicionando a primeira celula a lista

        }else {
            Celula nova = new Celula(elemento, this.primeiro);

    /*  a dúvida é aqui, porque estamos setando a anterir nova
     e logo abaixo estamos trocando a referencia de this.primeiro para a nova celula??? para que eu seto a anterior e mudo a referencia do objeto */
            this.primeiro.setAnterior(nova);

            this.primeiro = nova;
        }

Eu nao consehui entender como funciona eu dar um setAnterior() e depois atribuir a this.primeiro outro objeto.

2 respostas
solução!

Oi Cleusa.

Esse método sempre insere uma nova célula no começo da lista, por isso, a última célula inserida é sempre a primeira da lista. Sabendo disso, quando inserimos um elemento e a lista não está vazia precisamos fazer 3 coisas:

1) Fazer o campo proxima da nova celula apontar para a então primeira celula da lista. O que no caso é feito diretamente no construtor passando o então primeiro elemento como parametro.

Celula nova = new Celula(elemento, this.primeiro);

2) Fazer o campo anterior do então primeiro elemento da lista apontar para a nova celula.

this.primeiro.setAnterior(nova);

3) E finalmente, o novo primeiro da lista passa a ser a nova célula inserida.

this.primeiro = nova;

Por fim, o elemento que voce acabou de inserir será o primeiro da lista, e o que era primeira antes ficará em segundo lugar.

Era isso que voce estava perguntando?

Ahhhhh kkkk é verdade , entendi, porque o this.primeiro.setAnterior(nova); ainda é o primeiro da lista antes dessa nova celula ser inserida , então eu faço com que essa primeira que na verdade sera a segunda da lista apontar para nova e ai sim eu digo que a primeira é a nova, agora entendi obrigada Giovana Delfino.