Method to Invert a Single Chained List

Asked

Viewed 865 times

2

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

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

Edit 1 I can’t 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);
 }


}
  • Is a list simply linked or double-linked ? Can you put the class No that you are using ?

  • 1

    I believe that this link will help you hehe

1 answer

1

A simple way to do this without using auxiliary structures or switching to a double-linked list is with recursion.

You can open each next knot until you reach the end, the NULL and before finishing the function, prints the node. It’s the same logic of printing a String unlike with recursiveness.

Example:

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

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

    imprimirAuxiliar(no.prox);
    System.out.print("[" + no.valor + "]");
}
  • Hello @Isac saw that you commented double linked list. In case a simple as you would do the inversion?

  • 1

    @YODA In this case the logic that needs is different. And it is worth noting that this code does not reverse the list, only shows the inverted list.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.