This article will demonstrate the Implementation of Doubly Linked List In JavaScript.
A doubly linked list (DLL) is a special type of linked list in which each node contains a pointer to the previous node as well as the next node of the linked list.
Doubly Linked List in JavaScript
To create we have to create the following classes:
- Node Class: To implement and create elements and link other elements.
- Doubly Linked List Class: To store and access all nodes of the list.
Doubly LinkedList Node is constructed of the following items
- A class named node
- A class constructor, and
- Data items/variables
- data: to contain respective node value
- next: to link the next node with the default value as null.
- prev: to link the previous node with the default value as null.
Example:
Javascript
// Doubly Linked list Node class Node {Â
    // Constructor to create a new node    // next and prev is by default initialized as null    constructor(val) {             // To store the value        this.data = val;                 // To link the next Node        this.next = null;                 // TO link the previous Node        this.prev = null;    }} |
Doubly Linked List is constructed of the following items
- Class Named DoublyLinkedList
- A constructor to create the DLL
- Data items/variables:
- head: to store the starting node
- tail: to store the ending node
Example:
Javascript
// Doubly Linked Listclass DoublyLinkedList {Â
    // Constructor to create a new linked list    constructor() {             // To contain the first item of the list        this.head = null;             // To contain the last item of the list        this.tail = null;    }} |
Basic Operations in Doubly Linked Lists:
Method to Check if the List is Empty:
- Check if the head is null or not and return result
Javascript
// To check if the list is emptyisEmpty() {Â Â Â Â if (this.head == null) return true;Â Â Â Â return false;} |
Method to Insert Element:
- Create a new node with value as argument
- Check if the head is null insert at head
- Else insert the new node at the tail and shift tail pointer
Javascript
// Method to add item at the last of doubly linked listaddItem(val) {             // Create a temporary variable    let temp = new Node(val);Â
    // If the list is empty link assign    // new node to both head and tail    if (this.head == null) {        this.head = temp;        this.tail = temp;    }Â
    // else add item to the tail and shift tail    else {        temp.prev = this.tail;        this.tail.next = temp;        this.tail = this.tail.next;    }} |
To traverse and display the list:
- Check is the list is not null
- Use a current poiter to treaverse the list and display value using console.log()
Javascript
// To traverse and display the listdisplay() {Â
    // Check if the List is empty    if (!this.isEmpty()) {Â
        // traverse the list using new current pointer        let curr = this.head;        while (curr !== null) {Â
            // Display element            console.log(curr.data);Â
            // Shift the current pointer            curr = curr.next;        }    }} |
Implementation of Doubly Linked List
Example: This example demonstrate the basic implementation of a link list.
Javascript
// Doubly Linked list Nodeclass Node {    // Constructor to create a new node    // next and prev is by default initialized as null    constructor(val) {        // To store the value        this.data = val;Â
        // To link the next Node        this.next = null;Â
        // TO link the previous Node        this.prev = null;    }}Â
// Doubly Linked Listclass DoublyLinkedList {    // Constructor to create a new linked list    constructor() {        // To contain the first item of the list        this.head = null;Â
        // To contain the last item of the list        this.tail = null;    }Â
    // To check if the list is empty    isEmpty() {        if (this.head == null) return true;        return false;    }Â
    // Method to add item at the last of doubly linked list    addItem(val) {                 // Create a temporary variable        let temp = new Node(val);Â
        // If the list is empty link assign        // new node to both head and tail        if (this.head == null) {            this.head = temp;            this.tail = temp;        }Â
        // else add item to the tail and shift tail        else {            this.tail.next = temp;            this.tail = this.tail.next;        }    }Â
    // To traverse and display the list    display() {Â
        // Check if the List is empty        if (!this.isEmpty()) {Â
            // traverse the list using new current pointer            let curr = this.head;            while (curr !== null) {Â
                // Display element                console.log(curr.data);Â
                // Shift the current pointer                curr = curr.next;            }        }    }}Â
// Create new Doubly Linked List const dll = new DoublyLinkedList();Â
// Add elements in the listdll.addItem(25);dll.addItem(27);dll.addItem(17);dll.addItem(29);Â
// Display the listdll.display(); |
25 27 17 29

