Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não lê o ultimo nome

Quando add. está linha ele para de ler o Marcelo

lista.adiciona(2, "Gabriel");
        System.out.println(lista);

Segue os cod. completos

package ed.listaligada;

public class TestaListaLigada {

    public static void main(String[] args) {

        ListaLigada lista = new ListaLigada();

        System.out.println(lista);
        lista.adicionaNoComeco("mauricio");
        System.out.println(lista);
        lista.adicionaNoComeco("paulo");
        System.out.println(lista);
        lista.adicionaNoComeco("guilherme");
        System.out.println(lista);

        lista.adiciona("Marcelo");
        System.out.println(lista);

        lista.adiciona(2, "Gabriel");
        System.out.println(lista);

        Object x = lista.pega(2);
        System.out.println(x);

        System.out.println(lista.tamanho());

    }

}

package ed.listaligada;

public class ListaLigada {

    private Celula primeira = null; // seta que aponta o primeiro
    private Celula ultima = null; // seta que aponta para o ultimo, para não precisar do looping
    private int totalDeElementos = 0;

    public void adicionaNoComeco(Object elemento) {
        Celula nova = new Celula(elemento, primeira);
        this.primeira = nova;

        if (this.totalDeElementos == 0) {
            this.ultima = this.primeira;
        }

        this.totalDeElementos++;

    }

    @Override
    public String toString() {

        if (this.totalDeElementos == 0) {
            return "[]";
        }

        Celula atual = primeira;

        StringBuilder builder = new StringBuilder("[");

        for (int i = 0; i < totalDeElementos; i++) {
            builder.append(atual.getElement());
            builder.append(",");

            atual = atual.getProximo();
        }

        builder.append("]");

        return builder.toString();

    }

    public void adiciona(Object elemento) { // insere no final

        if (this.totalDeElementos == 0) {
            adicionaNoComeco(elemento);

        } else {

            Celula nova = new Celula(elemento, null);
            this.ultima.setProximo(nova);
            this.ultima = nova;
            this.totalDeElementos++;
        }

    }

    private boolean posicaoOcupada(int posicao) {
        return posicao >= 0 && posicao < this.totalDeElementos;
    }

    private Celula pegaCelula(int posicao) {
        if (!posicaoOcupada(posicao)) {
            throw new IllegalArgumentException("posição inexistente");
        }

        Celula atual = primeira;

        for (int i = 0; i < posicao; i++) {
            atual = atual.getProximo();
        }

        return atual;
    }

    public void adiciona(int posicao, Object elemento) { // insere no meio 

        if(posicao == 0) {
            adicionaNoComeco(posicao);
        }else if (posicao == this.totalDeElementos) {
            adiciona(elemento);
        }else {
            Celula anterior = this.pegaCelula(posicao - 1);
            Celula nova = new Celula(elemento, anterior.getProximo());
            anterior.setProximo(nova);
        }

    }

    public Object pega(int posicao) {
        return this.pegaCelula(posicao).getElement();
    }

    public void remove(int posicao) {
    }

    public int tamanho() {
        return this.totalDeElementos;
    }

    public boolean contem(Object o) {
        return false;
    }

}
1 resposta
solução!

Gente... descobri! Havia esquecido de mandar somar o totalDeElementos++

tanks ;)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software