/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class No<T> {
T elemento;
No<T> proximo;
No<T> anterior;
public No(T elemento, No<T> anterior, No<T> proximo) {
this.elemento = elemento;
this.proximo = proximo;
this.anterior = anterior;
}
public No(T elemento) {
this.elemento = elemento;
proximo = null;
anterior = null;
}
@Override
return elemento.toString();
}
}
class Lista<T> {
private No<T> primeiro;
private int tamanho;
public void adicionar(T item){
No<T> novo = new No<T>(item);
if (primeiro == null){
primeiro = novo;
return;
}
No<T> curr = primeiro;
while (curr.proximo != null){
curr = curr.proximo;
}
curr.proximo = novo;
novo.anterior = curr;
}
public boolean remover(T item) {
if (primeiro == null) return false;
if (primeiro.elemento.equals(item)) {
primeiro = primeiro.proximo;
if (primeiro != null){
primeiro.anterior = null;
}
return true;
}
No<T> n = primeiro;
while (n != null && !n.elemento.equals(item)){
n = n.proximo;
}
if (n == null) return false;
n.anterior.proximo = n.proximo;
if (n.proximo != null){
n.proximo.anterior = n.anterior;
}
tamanho--;
return true;
}
public void mostrar(){
No<T> curr = primeiro;
while (curr != null){
System.
out.
print(curr.
toString() + " -> "); curr = curr.proximo;
}
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Lista<Integer> lista = new Lista<>();
lista.adicionar(5);
lista.adicionar(15);
lista.adicionar(2);
lista.adicionar(9);
lista.mostrar();
lista.adicionar(23);
lista.adicionar(4);
lista.adicionar(18);
lista.mostrar();
lista.remover(15);
System.
out.
println("Depois de remover o 15"); lista.mostrar();
lista.remover(18);
System.
out.
println("Depois de remover o 18"); lista.mostrar();
lista.remover(5);
System.
out.
println("Depois de remover o 5"); lista.mostrar();
lista.remover(2);
lista.remover(9);
lista.remover(23);
lista.remover(4);
System.
out.
println("Depois de remover todos"); lista.mostrar();
}
}