5
I implemented a chained list but when I enter 2 items, I remove the last one and add it again, for some reason it says that the value is null.
public class ListaDinamica<T> {
private class Celula<E>{
E item;
Celula<E> prox;
}
private Celula<T> primeiro;
private Celula<T> ultimo;
private int tamanho;
public ListaDinamica(){
this.primeiro = new Celula<>();
this.ultimo = this.primeiro;
this.tamanho = 0;
}
public ListaDinamica(ListaDinamica<T> objetos){
this();
for(int i=0;i<objetos.size();i++){
this.add(objetos.get(i));
}
}
public ListaDinamica(List<T> objetos){
this();
for(int i=0;i<objetos.size();i++){
this.add(objetos.get(i));
}
}
public boolean isEmpty(){
return size()==0;
}
public void add(T objeto){
if(isEmpty()){
Celula<T> aux = new Celula<>();
aux.item = objeto;
this.primeiro.prox = aux;
this.ultimo = aux;
this.tamanho++;
}
else{
this.ultimo.prox = new Celula<>();
this.ultimo = this.ultimo.prox;
this.ultimo.item = objeto;
this.ultimo.prox = null;
this.tamanho++;
}
}
public void remove(int i){
if(isEmpty())return;
if(i==0){
this.primeiro.prox = this.primeiro.prox.prox;
this.tamanho--;
}
else{
Celula<T> aux = this.primeiro.prox;
for(int j=0;j<i;j++){
if(j==i-1){
aux.prox = aux.prox.prox;
this.tamanho--;
}
else{
aux = aux.prox;
}
}
}
}
public T get(int i){
if(isEmpty()) {
System.out.println("LISTA VAZIA");
return null;
}
if(i>=size()){
System.out.println("INDEX INVALIDO");
return null;
}
Celula<T> aux = this.primeiro.prox;
for(int j=0;j<i;j++){
aux = aux.prox;
}
return aux.item;
}
public int size(){
return this.tamanho;
}
}
And the test I did on Main that goes wrong:
public static void main(String[] args) {
ListaDinamica<String> lista = new ListaDinamica<>();
String s1 = "TESTE1";
String s2 = "TESTE2";
lista.add(s1);
lista.add(s2);
lista.remove(1);
lista.add(s2);
for(int i=0;i<lista.size();i++){
System.out.println(lista.get(i));
}
}
I can’t see where it’s wrong, I’ve changed my code many times and it doesn’t work..
It worked. Thanks!
– Gustavo Mendonça