1.6 Eliminar elementos en una lista abierta

De nuevo podemos encontrarnos con varios casos, según la posición del nodo a eliminar.

Eliminar el primer nodo de una lista abierta

Eliminar primer nodo
Eliminar primer nodo

Es el caso más simple. Partiremos de una lista con uno o más nodos, y usaremos un puntero auxiliar, nodo:

  1. Hacemos que nodo apunte al primer elemento de la lista, es decir a Lista.
  2. Asignamos a Lista la dirección del segundo nodo de la lista: Lista->siguiente.
  3. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.

Si no guardamos el puntero al primer nodo antes de actualizar Lista, después nos resultaría imposible liberar la memoria que ocupa. Si liberamos la memoria antes de actualizar Lista, perderemos el puntero al segundo nodo.

Primer nodo eliminado
Primer nodo eliminado

Si la lista sólo tiene un nodo, el proceso es también válido, ya que el valor de Lista->siguiente es NULL, y después de eliminar el primer nodo la lista quedará vacía, y el valor de Lista será NULL.

De hecho, el proceso que se suele usar para borrar listas completas es eliminar el primer nodo hasta que la lista esté vacía.

Eliminar un nodo cualquiera de una lista abierta

En todos los demás casos, eliminar un nodo se puede hacer siempre del mismo modo. Supongamos que tenemos una lista con al menos dos elementos, y un puntero al nodo anterior al que queremos eliminar. Y un puntero auxiliar nodo.

Eliminar un nodo
Eliminar un nodo

El proceso es parecido al del caso anterior:

  1. Hacemos que nodo apunte al nodo que queremos borrar.
  2. Ahora, asignamos como nodo siguiente del nodo anterior, el siguiente al que queremos eliminar: anterior->siguiente = nodo->siguiente.
  3. Eliminamos la memoria asociada al nodo que queremos eliminar.
Nodo eliminado
Nodo eliminado

Si el nodo a eliminar es el último, es procedimiento es igualmente válido, ya que anterior pasará a ser el último, y anterior->siguiente valdrá NULL.