Sie sind auf Seite 1von 9

Listas Circulares Doblemente Enlazadas

Teora y Ejemplos

Mario Medrano

En las listas circulares doblemente enlazadas cada nodo tiene un par de campos de enlace, uno
al nodo siguiente, y otro al anterior.

Un campo de enlace permite atravesar la lista hacia adelante, mientras que el otro permite
atravesar la lista hacia atrs.

Se tienen dos cabeceras, una para recorrer la lista de izquierda a derecha y otra para recorrerla
de derecha a izquierda.

Para usar la cabecera izquierda se utiliza el campo de enlace sgte. El final de dicha lista no
existe ya que en lugar de direccionarse al null se direcciona nuevamente a el mismo.

Mientras que con cabecera derecha se utiliza el campo de enlace ant. Y de igual manera no
tiene un fin definido, ya que si no se lo detiene, dar vueltas.

El movimiento a travs de listas circulares doblemente enlazadas es ms sencillo, ya que a partir


de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista.

Incluso resulta mucho ms sencillo ya que no se tiene el inconveniente de los "null"

Aadir un elemento a la Lista Doblemente


Enlazada
Aadir elemento en una lista doblemente enlazada vaca

Creamos un nuevo nodo le asignamos un valor y lo direccionamos a el


mismo tanto por atrs como por delante.

Debido a que la Lista se encuentra vaca tanto la cabecera izquierda y


derecha se igualan al nuevo nodo.

Insertar una nueva cabecera izquierda y derecha

Partimos de una lista no vaca.

Creamos un nuevo nodo le asignamos un valor y lo direccionamos a el


mismo tanto por atrs como por delante, al igual que en el caso anterior.

Mandamos el nuevo nodo a una funcin insertar, en la cual la direccionamos


a la cabecera correspondiente (la cual debe ser elegida desde la clase
principal).

Luego de ser adherida a la Lista re retorna una nueva cabecera a la funcin


principal.

DIFERENCIA ES MNIMA

En caso de querer insertar un dato por la cabecera izquierda, se debe pedir


actualizar dicha cabecera desde la clase principal, haciendo un llamado a al
mtodo explicado anteriormente.

Mientras que si se quiere agregar por la cabecera derecha el llamado a la


funcin la debe realizar dicha cabecera.

Insertar un nodo en una posicin x

Al igual que en los dos casos anteriores, partimos de una lista no vaca.

Creamos un nuevo nodo le asignamos un valor y lo direccionamos a el


mismo tanto por atrs como por delante, al igual que en el caso anterior.

Con un ciclo vamos recorriendo la copia de la Lista hasta posicionarnos en


un nodo anterior a la posicin deseada.

Modificamos las direcciones a donde apuntan los nodos, de tal manera que
el nuevo nodo quede al centro del nodo anterior y del nodo siguiente.

Luego de hacer todas las modificaciones, actualizamos la Lista a la funcin


principal de tal manera que incluya al nuevo nodo.

Borrar un elemento de la Lista Circular


Doblemente Enlazada
Borrar cabecera izquierda y derecha

Obviamente antes de emplear este mtodo hay que asegurarse que la Lista no se encuentre
vaca.

Cuando la Lista tenga solo un nodo, lo nico que se debe hacer es colocar ambas cabeceras en
null, de manera que la Lista quede vaca.

Entonces lo que nos quedara resolver sera el caso en el que la Lista tenga ms de un nodo.

Por la izquierda

El mtodo es muy sencillo, se le asigna una nueva direccin a la cabecera,


la cual es la direccin del nodo siguiente, y al nodo siguiente se le apunta ya
no a la cabecera izquierda, sino sino que se la apunta a la cabecera
derecha, quedando totalmente anulada la cabecera izquierda y obteniendo
una nueva.

Por la derecha

El mtodo es exactamente el mismo, solo varia la utilizacion de "sgte" y


"ant"

Das könnte Ihnen auch gefallen