- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
JavaScript Program for Rotate Doubly linked list by N nodes
A doubly linked list is a linear data structure where each node stores the address of the next and previous node. We have given a doubly linked list and we have to rotate the doubly linked list by N nodes and print it. Here N is the positive number and less than or equal to the count of the nodes present in the linked list.
We are not given the specific side to rotate the doubly linked list. So we will rotate the doubly linked list in both ways.
Rotating Doubly Linked List to Counter Clockwise
We have to rotate the nodes of a doubly linked list counter-clockwise by a given number (N) times. And for the node which is present at the edge, they will move all the nodes except the last one in their right rotation by assuming a doubly linked list in a cycle form and then move the last one to the first node or head position. We will implement a proper code to implement the algorithm with an explanation.
Example
Let us assume we have given a doubly linked list as
LL = [1, 2, 3, 4, 5, 6, 7]
The number of rotations of the nodes is 3
Output:
Rotated LL = [5, 6, 7, 1, 2, 3, 4]
Example
In the below example, we rotate a doubly linked list to counter clockwise by 3 modes.
Input: 1 <=> 2 <=> 3 <=> 4 <=> 5 <=> 6 <=> 7 <=> 8 -> null
Expected Output: 6 <=> 7 <=> 8 <=> 1 <=> 2 <=> 3 <=> 4 <=> 5 -> null
// class to create the structure of the nodes class Node{ constructor(data) { this.value = data; this.next = null; this.prev = null; } } // function to print the linked list function print(head){ var temp = head; var ans = "" while(temp.next != null){ ans += temp.value; ans += " <=> " temp = temp.next } ans += temp.value ans += " -> null" console.log(ans) } // function to add data in linked list function add(data, head, tail){ var new_node = new Node(data); if(head == null){ head = new_node return new_node } else{ tail.next = new_node; new_node.prev = tail return new_node } } // function to rotate the linked list function rotate(head, rotations){ var temp = head; // getting length of the linked list var len = 0; while(temp != null){ len++; temp = temp.next; } temp = head; var mid = temp; for(var i=0;i<len-rotations;i++){ mid = mid.next; } mid.prev.next = null head = mid head.prev = null while(mid.next != null){ mid = mid.next; } mid.next = temp; return head; } // defining linked list var head = new Node(1) var tail = head tail = add(2,head, tail) tail = add(3,head, tail) tail = add(4,head, tail) tail = add(5,head, tail) tail = add(6,head, tail) tail = add(7,head, tail) tail = add(8,head, tail) // given number number = 3; console.log("The given linked list is: ") print(head) console.log("The given linked list after 3 rotations is: ") head = rotate(head,number) print(head)
Output
The given linked list is: 1 <=> 2 <=> 3 <=> 4 <=> 5 <=> 6 <=> 7 <=> 8 -> null The given linked list after 3 rotations is: 6 <=> 7 <=> 8 <=> 1 <=> 2 <=> 3 <=> 4 <=> 5 -> null
Rotating Doubly Linked List to Clockwise
We have to rotate the nodes of a doubly linked list to clockwise by a given number (N) times. And for the node which is present at the edge, they will move to the first index in their right rotation by assuming a doubly linked list in a cycle form. We will implement a proper code to implement the algorithm with an explanation.
Example:
Let us assume we have given a doubly linked list as
LL = [1, 2, 3, 4, 5, 6, 7]
The number of rotations of the nodes is 3
Output:
Rotated LL = [4,5, 6, 7, 1, 2, 3]
Example
In the below example, we rotate a doubly linked list to clockwise by 3 modes.
Input: 1 <=> 2 <=> 3 <=> 4 <=> 5 <=> 6 <=> 7 <=> 8 -> null
Expected Output: 4 <=> 5 <=> 6 <=> 7 <=> 8 <=> 1 <=> 2 <=> 3 -> null
// class to create the structure of the nodes class Node{ constructor(data){ this.value = data; this.next = null; this.prev = null; } } // function to print the linked list function print(head){ var temp = head; var ans = "" while(temp.next != null){ ans += temp.value; ans += " <=> " temp = temp.next } ans += temp.value ans += " -> null" console.log(ans) } // function to add data in linked list function add(data, head, tail){ var new_node = new Node(data); if(head == null){ head = new_node return new_node } else{ tail.next = new_node; new_node.prev = tail return new_node } } // function to rotate the linked list function rotate(head, rotations){ var temp = head; // getting length of the linked list var len = 0; while(temp != null){ len++; temp = temp.next; } temp = head; var mid = temp; for(var i=0;i<rotations;i++){ mid = mid.next; } mid.prev.next = null head = mid head.prev = null while(mid.next != null){ mid = mid.next; } mid.next = temp; return head; } // defining linked list var head = new Node(1) var tail = head tail = add(2,head, tail) tail = add(3,head, tail) tail = add(4,head, tail) tail = add(5,head, tail) tail = add(6,head, tail) tail = add(7,head, tail) tail = add(8,head, tail) // given number number = 3; console.log("The given linked list is: ") print(head) console.log("The given linked list after 3 rotations is: ") head = rotate(head, number) print(head)
Output
The given linked list is: 1 <=> 2 <=> 3 <=> 4 <=> 5 <=> 6 <=> 7 <=> 8 -> null The given linked list after 3 rotations is: 4 <=> 5 <=> 6 <=> 7 <=> 8 <=> 1 <=> 2 <=> 3 -> null
Conclusion
In this tutorial we have implemented a JavaScript program to rotate the doubly linked list by given number of rotations in both clockwise and counter-clockwise direction without using any extra space and in linear time complexity.