Doubly Linked List con punteros bidireccionales
Clase 19 de 29 • Curso de Estructuras de Datos con JavaScript
Contenido del curso
Arrays y strings
- 4

Cómo funcionan arrays en memoria de JavaScript
07:23 min - 5

Construcción de Arrays con Clases en JavaScript
09:33 min - 6

Métodos pop y delete en arrays
16:01 min - 7
Playground: crea tu propia implementación de unshift
- 8
Playground: crea tu propia implementación de shift
- 9

Inmutabilidad de Strings y Almacenamiento en Memoria
02:42 min
Hash Table
Linked List
- 15

Estructuras de Datos: Listas Enlazadas en JavaScript
05:20 min - 16

Estructura y Creación de una Lista Enlazada Simple en JavaScript
10:03 min - 17

Métodos para Manipular Nodos en Listas Enlazadas
12:12 min - 18

Inserta nodos intermedios sin romper enlaces en JavaScript
16:08 min - 19

Doubly Linked List con punteros bidireccionales
Viendo ahora
Stacks
Queues
Trees
Graphs
Cierre
Domina la construcción de una doubly linked list: una estructura con recorrido bidireccional que usa punteros next y preview para moverse de la head a la tail y viceversa. Verás cómo su nodo incluye tres campos y cómo adaptar el método append para enlazar en dos direcciones con una sola línea clave.
¿Qué es una doubly linked list y por qué usarla?
Una doubly linked list es una linked list con enlaces hacia adelante y hacia atrás. A diferencia de una singly, no necesitas “volver a empezar” desde la cabeza para regresar; puedes ir de la tail a la head directamente. Esto puede hacer ciertas búsquedas y recorridos más ágiles en casos particulares.
¿Qué ventajas ofrece frente a una singly linked list?
- Recorrido en dos direcciones: head → tail y tail → head.
- Evita rehacer bucles desde el inicio al retroceder.
- Misma regla de acceso: no hay índice aleatorio, se recorre nodo a nodo.
¿Cómo se recorre sin volver al inicio?
- Avanza con next hasta la tail.
- Retrocede con preview hasta la head.
- Mantiene la lógica de lista enlazada: pasos secuenciales, sin acceso por índice directo.
¿Cómo se define la estructura: nodo, instancia y memoria?
El corazón de la lista es el nodo. Aquí cambia respecto a una singly: además de value y next, se agrega un puntero preview (al previo), que inicia en null.
¿Qué contiene el nodo de una doubly linked list?
- value: el dato que guarda el nodo.
- next: referencia al siguiente nodo.
- preview: referencia al nodo anterior; inicia en null.
Ejemplo mínimo del nodo:
class Node {
constructor(value) {
this.value = value;
this.next = null;
this.preview = null; // previo
}
}
¿Cómo se inicializa la primera instancia de la clase?
- Crear el primer nodo con value y next = null.
- Definir preview = null en ese primer nodo.
- Asignar head = tail = primerNodo.
- Iniciar length = 1 porque ya existe un elemento.
Representación mental en memoria: - Los nodos forman una cadena con dos direcciones. - Puedes “saltar” hacia atrás gracias a preview sin reiniciar desde la head.
¿Cómo programar append y qué reto sigue?
El método append añade un nodo al final y ahora debe enlazar en ambos sentidos. El ajuste clave es establecer el preview del nuevo nodo apuntando a la tail actual, luego encadenar el next y actualizar la tail.
¿Cómo cambia el método append?
- Crear el nuevo nodo.
- Apuntar su preview a la tail actual.
- Conectar la tail actual hacia adelante con next.
- Mover tail al nuevo nodo e incrementar length.
Fragmento esencial del enlace doble:
append(value) {
const newNode = new Node(value);
newNode.preview = this.tail; // enlace hacia atrás
this.tail.next = newNode; // enlace hacia adelante
this.tail = newNode; // actualizar cola
this.length++;
return this;
}
Resultados esperados tras varios append: - La head conserva preview = null. - La tail conserva next = null. - Los nodos intermedios tienen next y preview correctamente enlazados.
¿Qué métodos debes extender después?
- Implementa la misma lógica de doble enlace en insert.
- Ajusta referencias en remove para ambos lados.
- Revisa métodos previos de la singly y añade preview donde corresponda.
Sigue la recomendación: antes de codear, toma papel y lápiz para planear los enlaces. ¿Ya adaptaste tus métodos con el nuevo puntero? Comparte tu solución y cuéntanos cómo lo resolviste.