Operaciones con Listas Doblemente Enlazadas
De nuevo tenemos el mismo repertorio de operaciones sobre este tipo listas:
Añadir elemento en una lista doblemente enlazada Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el puntero que define la lista, que valdrá NULL: El proceso es muy simple, bastará con que:
lista->siguiente y lista->anterior apunten
a null.
Insertar un elemento en la primera posición de la lista
Partimos de una lista no vacía. Para simplificar, consideraremos que
lista apunta al primer elemento de la lista doblemente enlazada:
El proceso es el siguiente:
Recuerda que Lista no tiene por qué apuntar a ningún miembro concreto de una lista doblemente enlazada, cualquier miembro es igualmente válido como referencia.
Insertar un elemento en la última posición de la lista Igual que en el caso anterior, partiremos de una lista no vacía, y de nuevo para simplificar, que Lista está apuntando al último elemento de la lista:
El proceso es el siguiente:
Insertar un elemento a continuación de un nodo cualquiera de una lista Bien, este caso es más genérico, ahora partimos de una lista no vacía, e insertaremos un nodo a continuación de uno nodo cualquiera que no sea el último de la lista:
El proceso sigue siendo muy sencillo:
Lo que hemos hecho es trabajar como si tuviéramos dos listas enlazadas, los dos primeros pasos equivalen a lo que hacíamos para insertar elementos en una lista abierta corriente. Los dos siguientes pasos hacen lo mismo con la lista que enlaza los nodos en sentido contrario. El paso 4 es el más oscuro, quizás requiera alguna explicación. Supongamos que disponemos de un puntero auxiliar, "p" y que antes de empezar a insertar nodo, hacemos que apunte al nodo que quedará a continuación de nodo después de insertarlo, es decir p = Lista->siguiente. Ahora empezamos el proceso de inserción, ejecutamos los pasos 1, 2 y 3. El cuarto sería sólo hacer que p->anterior apunte a nodo. Pero nodo->siguiente ya apunta a p, así que en realidad no necesitamos el puntero auxiliar, bastará con hacer que nodo->siguiente->anterior apunte a nodo.
|