Open In App

JavaScript Program to Reverse a Linked List

A linked list is a data structure where elements are stored in nodes, and each node points to the next node in the sequence. Reversing a linked list involves changing the direction of the pointers, making the last node the new head and the head the new tail.

Below are the approaches to reverse a linked list in JavaScript:



Reversing a Linked List Using Iteration

We will use a loop to iterate through the elements and the pointer nodes of the linked list and change the next pointers of each node in such a way that their order is reversed.



Example: The below code iteratively reverses the linked list in JavaScript.




class Node {
    constructor(data, next = null) {
        this.data = data;
        this.next = next;
    }
}
 
class LinkedList {
    constructor() {
        this.head = null;
    }
 
    insertFirst(data) {
        this.head = new Node(data, this.head);
    }
 
    printList() {
        let current = this.head;
        while (current !== null) {
            console.log(current.data);
            current = current.next;
        }
    }
    reverse() {
        let prev = null;
        let current = this.head;
        let next = null;
 
        while (current !== null) {
            next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }
        this.head = prev;
    }
}
 
const linkedList = new LinkedList();
 
linkedList.insertFirst(3);
linkedList.insertFirst(2);
linkedList.insertFirst(1);
 
console.log("Original Linked List:");
linkedList.printList();
 
linkedList.reverse();
 
console.log("\nReversed Linked List:");
linkedList.printList();

Output
Original Linked List:
1
2
3

Reversed Linked List:
3
2
1

Time Complexity: O(N)

Space Complexity: O(1)

Reversing a Linked List Using Recursion

Recursion is a process in which a function calls itself directly or indirectly. We are going to reverse the linked list by iterating through its elements using recursion and change their node values.

Example: The below code is the implementation of the recursive approach to reverse the linked list in JavaScript.




class Node {
    constructor(data, next = null) {
        this.data = data;
        this.next = next;
    }
}
 
class LinkedList {
    constructor() {
        this.head = null;
    }
 
    insertFirst(data) {
        this.head = new Node(data, this.head);
    }
 
    reverseRecursiveUtil(current, prev) {
        if (current === null) {
            this.head = prev;
            return;
        }
 
        const next = current.next;
        current.next = prev;
 
        this.reverseRecursiveUtil(next, current);
    }
 
    reverseRecursive() {
        this.reverseRecursiveUtil(this.head, null);
    }
 
    printList() {
        let current = this.head;
        while (current !== null) {
            console.log(current.data);
            current = current.next;
        }
    }
}
 
const linkedList = new LinkedList();
 
linkedList.insertFirst(3);
linkedList.insertFirst(2);
linkedList.insertFirst(1);
 
console.log("Original Linked List:");
linkedList.printList();
 
linkedList.reverseRecursive();
 
console.log("\nReversed Linked List:");
linkedList.printList();

Output
Original Linked List:
1
2
3

Reversed Linked List:
3
2
1

Time Complexity: O(N)

Space Complexity: O(N)


Article Tags :