Simple Chained List

Asked

Viewed 544 times

0

I’m having trouble removing an item at the end of the list

Defining the knot:

class Node {

        Node proximo;
        int chave;

        Node(int chave) {
            this.chave = chave;
        }

    }

Simple Chained List:

class ListaLigada {

    Node primeiro;

    /* construtor */
    ListaLigada() {
        primeiro = null;
    }

    void addInicio(int chave) {
        if (vazia()) {
            primeiro = new Node(chave);
            return;
        }

        Node novo = new Node(chave);
        novo.proximo = primeiro;
        primeiro = novo;
    }

    void addFim(int chave) {

        if (vazia()) {
            addInicio(chave);
            return;
        }

        addFim(null, primeiro, chave);
    }

    void addFim(Node anterior, Node atual, int chave) { 
        if (atual == null) {
            anterior.proximo = new Node(chave);
            return;
        }

        addFim(atual, atual.proximo, chave);
    }

    void removeInicio() {
        primeiro = primeiro.proximo;
    }

    void removeFim() {
        if (vazia()) {
            System.out.println("Nao ha elementos na lista");
        }
        removeFim(null, primeiro); 
    }

    void removeFim(Node anterior, Node atual) { 
        if (atual == null) {
            anterior = atual;
            return;
        }

        removeFim(atual, atual.proximo);
    }

    void remove(int chave) {

        if (primeiro.chave == chave) {
            removeInicio();
            return;
        }

        remove(null, primeiro, chave);
    }

    void remove(Node anterior, Node atual, int chave) {
        if (chave == atual.chave) {
            anterior.proximo = atual.proximo;
            return;
        }

        remove(atual, atual.proximo, chave);
    }

    void imprimeIterativo() {
        Node x;
        for (x = primeiro; x != null; x = x.proximo) {
            System.out.println(x.chave);
        }
    }

    void imprime() {
        imprime(primeiro);
    }

    void imprime(Node x) {
        if (x == null) {
            return;
        }

        System.out.println(x.chave);
        imprime(x.proximo);
    }


    boolean vazia() {
        return primeiro == null;
    }

}

I thought the function would have a structure similar to addNoFim(), but it didn’t work very well.

1 answer

0


It is necessary to change the function condition removeFim, case next for null, then it is the last element, so it has to be removed

void removeFim(Node anterior, Node atual) { 
    if (atual.proximo == null) {
        anterior.proximo = null;
        return;
    }

    removeFim(atual, atual.proximo);
}

Browser other questions tagged

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