Listas Doblemente Enlazadas: Creación y Manipulación Básica

Clase 15 de 23Curso de Estructuras de Datos Lineales con Python

Resumen

¿Cómo funcionan las listas doblemente enlazadas?

Las listas doblemente enlazadas, o "Double Link List", son una estructura de datos que mejora la flexibilidad de las listas enlazadas simples. La diferencia primordial radica en que cada nodo contiene referencias tanto al nodo siguiente como al nodo anterior. Esto permite recorrer la lista en ambas direcciones, algo que en una lista simplemente enlazada no es posible. Este tipo de listas es particularmente útil cuando necesitas realizar operaciones como la inserción y eliminación de nodos de manera eficiente y en ambas direcciones.

¿Cómo implementar una lista doblemente enlazada en Python?

Para construir una lista doblemente enlazada en Python comenzamos definiendo una clase para el nodo. La clase 2WayNode hereda de la clase Node, añadiendo un atributo adicional llamado prev que apunta al nodo anterior. Este atributo se inicializa como None.

class TwoWayNode(Node):
    def __init__(self, data, next=None, prev=None):
        super().__init__(data, next)
        self.prev = prev

¿Cómo instanciar nodos en una lista doblemente enlazada?

Para probar esta implementación, se puede crear una instancia de un nodo de doble vía utilizando el siguiente procedimiento:

  1. Importamos las clases necesarias:

    from double_link_list import Node, TwoWayNode
    
  2. Creamos el primer nodo:

    head = TwoWayNode(1)
    tail = head
    
  3. Añadimos más nodos usando un bucle for para iterar e insertar nuevos nodos directamente después del nodo actualmente apuntado por tail.

    for data in range(2, 6):
        tail.next = TwoWayNode(data, prev=tail)
        tail = tail.next
    

¿Cómo recorrer una lista doblemente enlazada?

El recorrer una lista doblemente enlazada te permite leer los valores de cada nodo en ambas direcciones, lo que es una de las ventajas de este tipo de listas. Para recorrer la lista en reversa, podemos utilizar el atributo prev:

current = tail
while current is not None:
    print(current.data)
    current = current.prev

¿Cuál es el reto de crear una lista circular doblemente enlazada?

El siguiente paso en el manejo de listas doblemente enlazadas es convertirlas en circulares. Esto significa que el último nodo apunta nuevamente al primero, y el primero apunta al último, creando un bucle. Se trata de un desafío en lógica de programación, pero esencial después de haber comprendido cómo se generan listas circulares simples y listas de doble enlace. Así que, manos a la obra: prueba a crear una lista circular doblemente enlazada.

Tu reto consiste en dotar de métodos a esta estructura que permitan realizar operaciones comunes como la inserción, eliminación y búsqueda de nodos, aprovechando al máximo su capacidad de ser recorrida en ambas direcciones. Esta estructura resultará muy poderosa y versátil para resolver problemas complejos en programación.

¡Continúa aprendiendo y explorando nuevas estructuras de datos! En la siguiente clase, descubriremos los "stacks" o pilas, una estructura que te resultará fascinante por su sencillez y utilidad.