Eu estou tentando de várias formas. Na lógica, não há problema no meu algoritmo de remoção, mas ele insiste em não apresentar o resultado que eu quero, o primeiro nó eu consigo remover. Eu quero que ele retire o 10, 40 e o 60 da lista. Por que ele não apaga o último nó e nem o do meio?
10
20
30
40
50
60
Ele deve retornar:
20
30
50
Ele insiste em retornar:
20
30
40
50
60
public class Lista {
private No head,tail = null;
private byte cont;
public void adicionaNo(int i){
No atual = new No(head,null,i);
if (head==null)//se lista estiver vazia
head = tail = atual;
else{
//seta prox do No do fim para receber caixa
tail.setNext(atual);
tail = atual;
}
}
public void exibeLista()
{
No aux;
aux=head;
while (aux!=null)
{
System.out.println(aux.getElem());
aux=aux.getNext();
}
}
public No busca(int elemento){
No busca= head;
while ((busca!=null) && (busca.getElem()!=elemento)){
busca = busca.getNext();
}
if((busca!=null) && (busca.getElem()== elemento)){
return busca;
}else{
return null;
}
}
public void remove(int elemento){
No atual;
byte tres = 3;
atual = busca(elemento);
if (atual == null){
System.out.println(";|");
}else{
if((atual==head)&& (atual== tail)){
head = null;
tail= null;
}else{
cont++;
}
if((atual == head)){ //remove do inicio
head = atual.getNext();
head.setPrev(null);
}else{
cont++;
}
if(atual == tail){ //remove do fim
No penultimo = atual.getPrev();
penultimo = tail;
tail.setNext(null);
}else{
cont++;
} if (cont == tres){
atual.getPrev().setNext(atual.getNext());
atual.getNext().setPrev(atual.getPrev());
}
}
}
}
public static void main(String[] args) {
Lista start = new Lista();
start.adicionaNo(10);
start.adicionaNo(20);
start.adicionaNo(30);
start.adicionaNo(40);
start.adicionaNo(50);
start.adicionaNo(60);
start.remove(10);
start.remove(40);
start.remove(60);
start.exibeLista();
}