Method to invert a Simple Chained List

1

How to make the method ImprimirLista() print the inverted list.

Exemplo [1][2][3]
Imprimir [3][2][1]

Edit 1 I can not use Collections

public class ListaEncadeada {
    No primeiro,ultimo;
    int totalNos;

    public ListaEncadeada(){
        primeiro = ultimo = null;
        totalNos = 0;
    }

    public int getTotalNos(){
        return totalNos;
    }



    public boolean checkIfListaVazia(){
        if (getTotalNos() == 0){
            return true;
       }
       return false;
    }

    public void inserirNoInicio(No n) {
        if ( checkIfListaVazia() ){
            primeiro = ultimo = n;
        }
        else{
            n.prox = primeiro;
            primeiro = n;
        }
        totalNos++;
    }

    public void inserirNoFim(No n){
        // caso não existam nós inseridos,
        // insere o primeiro nó (n) na lista
        if ( checkIfListaVazia() ){
            primeiro = ultimo = n;
        }
        else{
            ultimo.prox = n;
            ultimo = n;
       }
       totalNos++;
    }

    public void excluirNo(No n){
        No noAtual;
        No noAnterior;
        noAtual = noAnterior = primeiro;
        int contador = 1;

        if (checkIfListaVazia() == false){
            while (contador <= getTotalNos() &&
                     noAtual.valor != n.valor){
                noAnterior = noAtual;
                noAtual = noAtual.prox;
                contador++;
            } 

        if(noAtual.valor == n.valor){
            if ( getTotalNos() == 1){
                primeiro = ultimo = null;
           }
           else{
               if (noAtual == primeiro){
                   primeiro = noAtual.prox;
               }
               else{
                   noAnterior.prox = noAtual.prox;
               }
           }
           totalNos--;
        }
    }
}

public void exibirLista(){
    No temp = ultimo;
    String valores = "";
    int contador = 1;
    if ( checkIfListaVazia() == false ){
        while (contador <= getTotalNos()){
            valores += Integer.toString(temp.valor)+"-";
            temp = temp.prox;
            contador++;
        }
    }
    JOptionPane.showMessageDialog(null, valores);
 }


}
    
asked by anonymous 29.05.2018 / 19:46

1 answer

0

A simple way you have to do this without using ancillary structures or change to a doubly linked list is with recursion.

You can go by opening each next node until you reach the end, NULL and before finishing the function, prints the node. It is the same logic of printing String as opposed to recursion.

Example:

public void imprimirLista(){
    imprimirAuxiliar(primeiro);
}

private void imprimirAuxiliar(No no){
    if (no == null){
        return;
    }

    imprimirAuxiliar(no.prox);
    System.out.print("[" + no.valor + "]");
}
    
29.05.2018 / 20:44