Listas ligadas simples: eliminación y gestión de memoria
lunes 5 de octubre · 13:00–14:15 · en 44 días
GUÍA 05-10-26 Estructuras de Datos
CN122 · lunes 05/10/2026 · 13:00-14:15 · Sesión 16
Listas ligadas simples: eliminación y gestión de memoria
ELIMINAR UN NODO
1. Localizar el nodo objetivo y su anterior.
2. Si es la cabeza, cabeza = cabeza->sig.
3. Si no, anterior->sig = objetivo->sig.
4. free(objetivo).
El orden es obligatorio: primero se desenlaza, después se libera. Liberar antes deja el programa leyendo memoria ajena.
LOS TRES ERRORES DE MEMORIA
- Fuga — perder la referencia sin liberar. La memoria queda ocupada hasta que el programa termina.
- Doble liberación — llamar free dos veces sobre la misma dirección; corrompe el montículo.
- Apuntador colgante — usar un apuntador después de liberarlo. El comportamiento es indefinido y a veces funciona, que es lo peor que puede pasar.
LIBERAR LA LISTA COMPLETA
Hay que guardar el siguiente antes de liberar el actual. Si haces free(p) y luego p = p->sig, estás leyendo memoria liberada.
- while (p) { Nodo *sig = p->sig; free(p); p = sig; }
HERRAMIENTAS
valgrind detecta fugas, dobles liberaciones y lecturas fuera de rango. Correrlo sobre las prácticas de este tema es la mejor forma de aprender a confiar en tu código.
LA LISTA COMO ESTRUCTURA BASE
Una pila con lista nunca se llena y el push es siempre O(1). Una cola con lista y apuntador a cola tiene ambas operaciones en O(1) sin aritmética modular. Las estructuras de las semanas anteriores se reimplementan mejor ahora.
PRÁCTICA
Eliminar por valor y por posición, liberar la lista completa, y reimplementar pila y cola sobre lista ligada.
Nada anotado en esta sesión todavía.