কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে ডাবলি লিংকড লিস্ট তৈরি করা


Doubly Linked List: ক্লাস স্ট্রাকচার ও ডিসপ্লে

ডাবলি লিংকড লিস্টে প্রতিটি নোডের next (পরবর্তী) এবং prev (পূর্ববর্তী) পয়েন্টার থাকে। লিস্ট ক্লাসে head (প্রথম) এবং tail (শেষ) উভয় ট্র্যাক করা হয়।

Class Structure

class DoublyLinkedList {
  constructor() {
    this.head = null;  // প্রথম নোড
    this.tail = null;  // শেষ নোড
    this.length = 0;   // এলিমেন্ট কাউন্ট
  }
}

// Node Structure (Prototype-এ সংজ্ঞা)
DoublyLinkedList.prototype.Node = class {
  constructor(data) {
    this.data = data;   // মান
    this.next = null;   // পরবর্তী নোড
    this.prev = null;   // পূর্ববর্তী নোড
  }
};

Display Method (Traversal)

হেড থেকে শুরু করে next ফলো করে শেষ পর্যন্ত ট্রাভার্স।

display() {
  let currNode = this.head;
  let output = "";
  
  while (currNode !== null) {
    output += currNode.data + " <-> ";
    currNode = currNode.next;
  }
  
  console.log(output + "null");
}

টেস্টিং

const list = new DoublyLinkedList();

// Manual node linking for display test
const n1 = new DoublyLinkedList.Node(10);
const n2 = new DoublyLinkedList.Node(20);
const n3 = new DoublyLinkedList.Node(30);

list.head = n1;
n1.next = n2;
n2.prev = n1;
n2.next = n3;
n3.prev = n2;
list.tail = n3;
list.length = 3;

list.display(); 
// আউটপুট: 10 <-> 20 <-> 30 <-> null

ভিজ্যুয়াল: Traversal Flow

HEAD (this.head)
  ↓
┌─────────┐    ┌─────────┐    ┌─────────┐
│ Data:10 │───▶│ Data:20 │───▶│ Data:30 │
│ Prev:∅  │◀───│ Prev:10 │◀───│ Prev:20 │
└─────────┘    └─────────┘    └─────────┘
  ↑                                    ↑
currNode = currNode.next          currNode = null (STOP)

সিংলি vs ডাবলি লিংকড লিস্ট

বৈশিষ্ট্য Singly Linked List Doubly Linked List
পয়েন্টার next মাত্র next + prev
ট্রাভার্সাল ফরওয়ার্ড মাত্র ফরওয়ার্ড + ব্যাকওয়ার্ড
টেইল ট্র্যাক অপশনাল বাধ্যতামূলক (O(1) টেইল অ্যাক্সেস)
মেমরি ওভারহেড কম বেশি (প্রতি নোডে ১ একস্ট্রা পয়েন্টার)
ডিলিশন (দেওয়া নোড থেকে) O(n) — হেড থেকে ট্রাভার্স লাগে O(1) — node.prev.next = node.next
ইনসারশন কমপ্লেক্সিটি সিম্পল দুই পয়েন্টার আপডেট লাগে

পরবর্তী স্টেপস

এই বেস ক্লাসে insert(), remove(), search(), reverseDisplay() आदि মেথড যোগ করুন।

  1. জাভাস্ক্রিপ্টে ডাবলি লিংকড লিস্টকে সার্কুলার (Circular) করা

  2. জাভাস্ক্রিপ্টে সিংলি লিংকড লিস্টকে সার্কুলার (Circular) করা

  3. জাভাস্ক্রিপ্ট ব্যবহার করে ডাবল লিংকড লিস্ট থেকে এলিমেন্ট সরানো

  4. ডাবলি লিংকড লিস্ট দিয়ে প্রায়োরিটি কিউ বাস্তবায়ন C++-তে