Lista ligada - obter valor da posição p


Curso de estrutura de dados e algoritmos em Java


Aprenda a obter o valor da posição p de uma lista ligada


Obter um elemento de uma lista ligada consiste de duas etapas.

A primeira delas é validar que a posição é válida, que consiste em saber se a posição é maior ou igual a zero e se a posição é menor do que o tamanho.

Repare que este método implementará a posição iniciando de zero para seguir o mesmo padrão das arrays nativas.

Feita a validação da posição, a segunda etapa consiste em percorrer a lista até a posição desejada, retornando o seu valor no final.

Assim como foir feito no adicionar na posição p, adicionaremos o atributo int tamanho para registrar o tamanho da lista, e a lista ligada ficará da seguinte forma:

public class ListaLigada<T> {

    private Node<T> inicio;
    private int tamanho;

    public ListaLigada() {
        inicio = null;
        tamanho = 0;
    }

    public int getTamanho() {
        return tamanho;
    }

    public Node getInicio() {
        return inicio;
    }

}

Com a classe da lista ligada definida, vamos implementar o método para obter o valor por etapas, começando pela validação da posição, conforme o código a seguir:

public T obterPosicao(int posicao) {
    // posição inicial da lista inicia em 0
    if (posicao < 0 || posicao >= tamanho) {
        throw new IllegalArgumentException("Posição inválida.");
    }
}

Na segunda etapa da implementação, percorremos a lista ligada utilizando um laço while, até encontrar o nó correspondente a posição procurada, conforme o código a seguir:

public T obterPosicao(int posicao) {
    // posição inicial da lista inicia em 0
    if (posicao < 0 || posicao >= tamanho) {
        throw new IllegalArgumentException("Posição inválida.");
    }

    // armazena a posição da lista na busca
    int posicaoLista = 0;
    // obtém a referência do nó inicial
    Node<T> node = inicio;
    // percorre a lista até encontrar o nó procurado
    while (posicaoLista < posicao) {
        node = node.getProximo();
        posicaoLista++;
    }

    // retorna o valor procurado
    return node.getValor();
}

Com o código implementado, veja como a classe da lista ligada fica com o método adicionada a ele, conforme o código a seguir:

public class ListaLigada<T> {

    private Node<T> inicio;
    private int tamanho;

    public ListaLigada() {
        inicio = null;
        tamanho = 0;
    }

    public int getTamanho() {
        return tamanho;
    }

    public Node getInicio() {
        return inicio;
    }

    public T obterPosicao(int posicao) {
        // posição inicial da lista inicia em 0
        if (posicao < 0 || posicao >= tamanho) {
            throw new IllegalArgumentException("Posição inválida.");
        }

        // armazena a posição da lista na busca
        int posicaoLista = 0;
        // obtém a referência do nó inicial
        Node<T> node = inicio;
        // percorre a lista até encontrar o nó procurado
        while (posicaoLista < posicao) {
            node = node.getProximo();
            posicaoLista++;
        }

        // retorna o valor procurado
        return node.getValor();
    }

}

Com isso terminamos a implementação do método para obter um valor da lista.


Artigos recentes: