agregarAlFinalagregarAlFinal()Bien, comencemos implementando el método agregarAlFinal.
agregarAlFinal()El primer paso es encapsular el valor dentro de un objeto Nodo.
agregarAlFinal()Usamos var para que el compilador detecte el tipo automáticamente.
agregarAlFinal()Queremos asignar nodo.value = item, pero este campo está declarado como privado.
NodoEn lugar de usar un setter, observemos algo:
La clase
nodoforma parte de la implementación interna de nuestra lista enlazada.
Por lo tanto, no necesitamos exponerla fuera de la clase ListaEnlazada.
NodoEn lugar de usar un setter:
nodoPodemos mover nodo dentro de la clase ListaEnlazada y hacerla privada.
Nodo✅ Así podemos acceder a sus campos privados directamente desde la clase contenedora.
Creamos un constructor que garantice que cada nodo tenga un valor válido desde su creación.
Así evitamos tener nodos “vacíos”. Siempre que creemos un nodo, debe tener un valor asociado.
Ahora, implementemos la lógica completa de agregarAlFinal:
1️⃣ Si la lista está vacía → primero y ultimo apuntan al nuevo nodo.
2️⃣ Si no → conectamos el último nodo al nuevo y actualizamos ultimo.
➡️ null
primero → 🟨10
último → 🟦20
🟨 Lista actual antes de agregar un nuevo nodo.
primero → 🟨10
último → 🟦20
🟩 nuevo nodo (30)
📦 Se ha creado un nuevo nodo 30, aún no conectado.
ultimo.next = nodo➡️ null
primero → 🟨10
último → 🟦20 ➡️ 🟩30
📌 Ahora el último nodo (20) apunta hacia el nuevo nodo 30.
ultimo➡️ null
primero → 🟨10
último → 🟩30 ✅
🎯 ultimo ahora apunta correctamente al nuevo nodo 30. La lista está completamente enlazada.
➡️ null
primero → 🟨10
último → 🟩30 ✅
🧩 Resultado final: primero (10) → 20 → ultimo (30) → null La lista conserva su estructura perfecta.
No tenemos aún un método print(), así que usaremos el depurador.
Agrega un punto de interrupción en la línea list.agregarAlFinal(30);
Ejecuta con Debug Main (Ctrl + D en Mac).
Usa el icono 🪄 “Step Over” para avanzar línea por línea.
list en el panel de variables.Verás algo así:
list
├── first → nodo(value=10)
│ └── next → nodo(value=20)
│ └── next → nodo(value=30)
└── last → nodo(value=30)
✅ Todo está correctamente enlazado. El último nodo apunta a null.
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 agregarAlFinal(int item) {
var nodo = new Nodo(item);
if (primero == null) {
primero = ultimo = nodo;
} else {
ultimo.next = nodo;
ultimo = nodo;
}
}
}