Lista encadeada/Lista Ligada - Problema com a remoção do último Nó e os medianos

1 resposta
R

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

1 Resposta

C

acho q falta “atual.setPrev(tail)” no adicionar nó

Criado 17 de maio de 2012
Ultima resposta 20 de mai. de 2012
Respostas 1
Participantes 2