Skip to content

Instantly share code, notes, and snippets.

@filosofisto
Last active May 14, 2021 15:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save filosofisto/04c4178a3abbc609c9ff9b6d6a5e6a48 to your computer and use it in GitHub Desktop.
Save filosofisto/04c4178a3abbc609c9ff9b6d6a5e6a48 to your computer and use it in GitHub Desktop.
Segue Rodrigo a correção no código. Pequenos ajustes.Compara com o original.Não testei tudo.
package com.company;
public class Celula {
private Object elemento;
private Celula proximo;
public Celula(Object elemento, Celula proxima) {
this.elemento = elemento;
this.proximo = proximo;
}
public Celula(Object elemento) {
this.elemento = elemento;
}
public Celula getProximo() {
return proximo;
}
public void setProximo(Celula proximo) {
this.proximo = proximo;
}
public Object getElemento() {
return elemento;
}
}
package com.company;
public class ListaLigada {
private Celula primeira = null;
private Celula ultima = null;
private int totalDeElemtos = 0;
public void adiciona(Object elemento) {
Celula nova = new Celula(elemento);
if (primeira == null) {
primeira = nova;
ultima = nova;
} else {
ultima.setProximo(nova);
ultima = nova;
}
this.totalDeElemtos++;
}
@Override
public String toString() {
if (this.totalDeElemtos == 0) {
return "[]";
}
StringBuilder builder = new StringBuilder("[");
Celula atual = primeira;
while (atual != null) {
builder.append(atual.getElemento());
builder.append(",");
atual = atual.getProximo();
}
builder.append("]");
return builder.toString();
}
private boolean posicaoOcupada(int posicao) {
return posicao >= 0 && posicao < totalDeElemtos;
}
private Celula pegaCelula(int posicao) {
if (!posicaoOcupada(posicao)) {
throw new IllegalArgumentException("Posição inexistente.");
}
Celula atual = primeira;
int i = 0;
while (atual != null) {
if (i++ == posicao) {
break;
}
atual = atual.getProximo();
}
return atual;
}
public void adiciona(int posicao, Object elemento) {
Celula atual = primeira;
Celula last = null;
Celula novo = new Celula(elemento);
int i = 0;
while (atual != null) {
atual = atual.getProximo();
if (i == posicao) {
last.setProximo(novo);
novo.setProximo(atual);
break;
}
i++;
last = atual;
}
this.totalDeElemtos++;
}
public Object pega(int posicao) {
return this.pegaCelula(posicao).getElemento();
}
public void removeDoComeco() {
if (this.totalDeElemtos == 0) {
throw new IllegalAccessError("Lista vazia");
}
this.primeira = this.primeira.getProximo();
this.totalDeElemtos--;
if (this.totalDeElemtos == 0) {
this.ultima = null;
}
}
public void remove(int posicao) {
}
public int tamanho() {
return this.totalDeElemtos;
}
public boolean contem(Object o) {
return false;
}
}
package com.company;
public class Main {
public static void main(String[] args) {
ListaLigada lista = new ListaLigada();
System.out.println(lista);
lista.adiciona("João");
System.out.println(lista);
lista.adiciona("Maria");
System.out.println(lista);
lista.adiciona("Roberta");
System.out.println(lista);
lista.adiciona("Marcelo");
System.out.println(lista);
lista.adiciona(2, "Juliana");
System.out.println(lista);
Object x = lista.pega(2);
System.out.println(x);
System.out.println(lista.tamanho());
lista.removeDoComeco();
System.out.println(lista);
System.out.println(lista.tamanho());
}
}
@flaviocr2012
Copy link

Boa tarde Eduardo. Obrigado pela solução. Só um detalhe: na hora de adicionar na posição 2, tá incluindo na próxima posição, na 3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment