Doubly Linked List — Struktur Data

Doubly Linked List adalah linked list di mana setiap node punya pointer ke node sebelumnya dan node berikutnya. Keunggulan vs Singly Linked List: Bisa traversal

Doubly Linked List adalah linked list di mana setiap node punya pointer ke node sebelumnya dan node berikutnya.

Keunggulan vs Singly Linked List:

class DNode {
  constructor(value) {
    this.value = value;
    this.prev = null;
    this.next = null;
  }
}

class DoublyLinkedList {
  constructor() {
    this.head = null;
    this.tail = null;
    this.size = 0;
  }

  // Tambah di akhir — O(1)
  append(value) {
    const node = new DNode(value);
    if (!this.tail) {
      this.head = node;
      this.tail = node;
    } else {
      node.prev = this.tail;
      this.tail.next = node;
      this.tail = node;
    }
    this.size++;
  }

  // Hapus node tertentu — O(1) jika punya referensi
  remove(node) {
    if (node.prev) node.prev.next = node.next;
    else this.head = node.next;

    if (node.next) node.next.prev = node.prev;
    else this.tail = node.prev;

    this.size--;
    return node.value;
  }

  // Cetak maju
  printForward() {
    let current = this.head;
    const result = [];
    while (current) {
      result.push(current.value);
      current = current.next;
    }
    return result.join(" ⇄ ");
  }
}

Kegunaan nyata:

🎭 Analogi sehari-hari: Rangkaian KRL. Tiap gerbong tau gerbong sebelumnya DAN sesudahnya. Penumpang mau pindah ke gerbong sebelumnya = langsung. Mau lepas gerbong di tengah? Tinggal sambungin gerbong sebelum & sesudahnya — gak perlu rombak semua.

💡 Kenapa LRU Cache butuh Doubly Linked List?

⚠️ Jebakan umum:

🎯 Singly vs Doubly:

TL;DR: Doubly Linked List = node tau prev & next. 2x memori, tapi remove node tertentu jadi O(1). Inti pondasi LRU Cache dan navigasi dua arah.