Lista simplesmente encadeada
void adicionar(int valor) { if (inicio == null) { inicio = new Elemento(); inicio.valor = valor; inicio.proximo = null; } else { Elemento auxiliar = inicio; while (auxiliar.proximo != null) { auxiliar = auxiliar.proximo; }
Elemento novo = new Elemento(); novo.valor = valor; novo.proximo = null; auxiliar.proximo = novo; } }
void adicionar(int valor, long indice) { // Validação do índice. // Deve estar entre 0 e n-1. long tamanho = tamanho(); long indiceDoUltimo = tamanho - 1; if (indice < 0 || indice > indiceDoUltimo) { throw new IndexOutOfBoundsException("Índice inválido."); }
if (indice == 0) { // Inserir elemento no inicio. Elemento auxiliar = new Elemento(); auxiliar.valor = valor; auxiliar.proximo = inicio; inicio = auxiliar; } else { // Inserir elemento depois do início. Elemento atual = buscarElemento(indice); Elemento anterior = buscarElemento(indice - 1);
// Criação do novo elemento. Elemento auxiliar = new Elemento(); auxiliar.valor = valor;
// Ajuste das referências. anterior.proximo = auxiliar; auxiliar.proximo = atual; } }
void remover(int valor) { // Lista vazia if (inicio == null) { return; }
// Buscar elemento que será removido e seu predecessor. Elemento auxiliar = inicio; Elemento anterior = null;
while (auxiliar.valor != valor) { if (auxiliar.proximo == null) { return; }