
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Doubly Linked Lists in JavaScript
In this article, we are going to discuss a Doubly Linked List Class data structure in JavaScript. This is a linear data structure. Doubly linked lists are almost the same as a singly linked list in all operations, we just need to keep track of one extra link per node. In singly linked lists, we just had next links, in doubly linked lists, we have 2 links, next and prev.
Doubly linked lists are represented as ?

Note that in the class itself, we also need to keep track of the tail(last element).
Example
In this example, we understand the implementation of doubly linked list and its operations in JavaScript. Here, we create the list while inserting the data into it; and possibly delete nodes while removing the data from them. We are also printing the list using a user defined method print().
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Doubly Linked List Data Structure</title> </head> <body> <script type="text/javascript"> function createNode(value) { return { value: value, next: null, previous: null, }; } class DoublyLinkedList { constructor() { this.head = null; this.tail = null; this.size = 0; } insert(value) { this.size++; let newNode = createNode(value); if (this.tail) { this.tail.next = newNode; newNode.previous = this.tail; this.tail = newNode; return newNode; } this.head = this.tail = newNode; return newNode; } remove() { if (this.tail) { this.size--; let removedTail = this.tail; let beforeTail = this.tail.previous; this.tail = beforeTail; if (this.tail) { this.tail.next = null; } else { this.head = null; } return removedTail; } return undefined; } print() { document.write("The Elements in the Doubly Linked List are :</br> "); let current = this.head; while (current) { document.write( `${current.previous?.value} ${current.value} ${current.next?.value}` ); current = current.next; } } insertHead(value) { this.size++; let newNode = createNode(value); if (this.head) { this.head.previous = newNode; newNode.next = this.head; this.head = newNode; return newNode; } this.head = this.tail = newNode; return newNode; } insertIndex(value, index) { if (index >= this.size) { throw new Error("Insert index out of bounds"); } if (index === 0) { return this.insertHead(value); } this.size++; let currentNode = this.head; for (let i = 0; i < index; i++) { currentNode = currentNode.next; } let previousNode = currentNode.previous; let newNode = createNode(value); newNode.next = currentNode; newNode.previous = previousNode; previousNode.next = newNode; currentNode.previous = newNode; return newNode; } } let dLinkedList = new DoublyLinkedList(); dLinkedList.insert(7); dLinkedList.insert(8); dLinkedList.insert(9); dLinkedList.print(); </script> </body> </html>