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() आदि মেথড যোগ করুন।