Listas Enlazadas — Método agregarAlInicio

💡 Comencemos con el método agregarAlInicio()

Bien, implementemos el método agregarAlInicio, muy parecido a agregarAlFinal.

public void agregarAlInicio(int item) {
    // Paso 1: crear un nuevo nodo con el valor recibido

}

💡 Comencemos con el método agregarAlInicio()

...
        private Nodo primero;
        private Nodo ultimo;
        
public void agregarAlInicio(int item) {
    // Paso 1: crear un nuevo nodo con el valor recibido
    var nodo = new Nodo(item);
}

El primer paso es encapsular el valor dentro de un objeto Nodo.

🧠 Lógica principal del método

Ahora tenemos dos escenarios posibles:

  • Si la lista está vacía → el nuevo nodo será tanto el primero como el último.

  • Si no está vacía → este nodo debe apuntarle al antiguo primero.

📊 Visualización — Antes de insertar

20

➡️

30

➡️ null

🟦 Nodo 20 → 🟩 Nodo 30 → null 📍 primero apunta a 20 📍 ultimo apunta a 30

📊 Visualización — Crear nuevo nodo

10

➡️

20

➡️

30

➡️ null

🟨 Creamos un nuevo nodo con valor 10, pero aún no está conectado al resto.

📊 Visualización — Conexión nodo.next = primero

10

➡️

20

➡️

30

➡️ null

📌 Ahora el nuevo nodo 10 apunta hacia 20 (el antiguo primero).

📊 Visualización — Actualizamos primero

10

➡️

20

➡️

30

➡️ null

🟨 El nodo 10 ahora es el nuevo primero. El puntero ultimo sigue en el nodo 30.

🧠 Lógica principal del método

public class ListaEnlazada {

    private Nodo primero;
    private Nodo ultimo;

    public void agregarAlInicio(int item) {
        var nodo = new Nodo(item);

        if (primero == null) {
            primero = ultimo = nodo;
        } else {
            nodo.next = primero;
            primero = nodo;
        }
    }
}

Así el nuevo nodo se coloca al comienzo de la lista, enlazando hacia el nodo que antes era el primero.

✨ Método estaVacia()

Podemos hacer que el código sea más legible creando un método auxiliar para verificar si la lista está vacía.

private boolean estaVacia() {
    return primero == null;
}

✨ Método estaVacia() aplicado

 public void agregarAlInicio(int item) {
        var nodo = new Nodo(item);

        if (primero == null) {
            primero = ultimo = nodo;
        } else {
            nodo.next = primero;
            primero = nodo;
        }
    }

Ahora podemos limpiar nuestro método agregarAlInicio():

✨ Método estaVacia() aplicado

 public void agregarAlInicio(int item) {
        var nodo = new Nodo(item);

        if (estaVacia()) {
            primero = ultimo = nodo;
        } else {
            nodo.next = primero;
            primero = nodo;
        }
    }

Mucho más limpio y mantenible.

Así evitamos repetir la comparación primero == null en varios lugares.

💡 Código completo de la clase

public class ListaEnlazada {

    private class Nodo {
        private int value;
        private Nodo next;

        public Nodo(int value) {
            this.value = value;
        }
    }

    private Nodo primero;
    private Nodo ultimo;


    public void agregarAlInicio(int item) {
            var nodo = new Nodo(item);

            if (estaVacia()) {
               primero = ultimo = nodo;
            } else {
              nodo.next = primero;
              primero = nodo;
             }
    }

    private boolean estaVacia() {
        return primero == null;
    }

    public void agregarAlFinal(int item) {
        var nodo = new Nodo(item);

        if (primero == null) {
            primero = ultimo = nodo;
        } else {
            ultimo.next = nodo;
            ultimo = nodo;
        }
    }

}

🧪 Probemos nuestro código

public class Main {
    public static void main(String[] args) {
        var list = new ListaEnlazada();
        list.agregarAlInicio(30);
        list.agregarAlInicio(20);
        list.agregarAlInicio(10);
    }
}

Al finalizar, primero tendrá el valor 10 y ultimo seguirá apuntando al nodo con 30.

🔍 Visualicemos la estructura

list
 ├── primero → nodo(value=10)
 │      └── next → nodo(value=20)
 │                   └── next → nodo(value=30)
 └── ultimo  → nodo(value=30)

✅ Todo está correctamente enlazado. El nuevo nodo se agregó al inicio de la lista.