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