Given a doubly linked list, rotate the linked list counter-clockwise by N nodes. Here N is a given positive integer and is smaller than the count of nodes in linked list.

N = 2
Rotated List:

Examples:
Input : a b c d e N = 2
Output : c d e a b
Input : a b c d e f g h N = 4
Output : e f g h a b c d
Asked in Amazon
To rotate the Doubly linked list, we need to change next of Nth node to NULL, next of last node to previous head node, and prev of head node to last node and finally change head to (N+1)th node and prev of new head node to NULL (Prev of Head node in doubly linked list is NULL)
So we need to get hold of three nodes: Nth node, (N+1)th node and last node. Traverse the list from beginning and stop at Nth node. Store pointer to Nth node. We can get (N+1)th node using NthNode->next. Keep traversing till end and store pointer to last node also. Finally, change pointers as stated above and at Last Print Rotated List using
PrintList Function.
Javascript
<script>
class Node {
constructor() {
this .data = 0;
this .prev = null ;
this .next = null ;
}
}
var head = null ;
function rotate(N) {
if (N == 0)
return ;
var current = head;
var count = 1;
while (count < N && current != null ) {
current = current.next;
count++;
}
if (current == null )
return ;
var NthNode = current;
while (current.next != null )
current = current.next;
current.next = head;
(head).prev = current;
head = NthNode.next;
(head).prev = null ;
NthNode.next = null ;
}
function push( new_data) {
var new_node = new Node();
new_node.data = new_data;
new_node.prev = null ;
new_node.next = (head);
if ((head) != null )
(head).prev = new_node;
head = new_node;
}
function printList(node) {
while (node != null && node.next != null ) {
document.write(node.data + " " );
node = node.next;
}
if (node != null )
document.write(node.data);
}
push('e ');
push(' d ');
push(' c ');
push(' b ');
push(' a');
var N = 2;
document.write( "Given linked list <br/>" );
printList(head);
rotate(N);
document.write();
document.write( "<br/>Rotated Linked list <br/>" );
printList(head);
</script>
|
Output:
Given linked list
a b c d e
Rotated Linked list
c d e a b
Time Complexity: O(N) (N is number of linked list’s node)
Auxiliary Space: O(N)
Please refer complete article on Rotate Doubly linked list by N nodes for more details!
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
08 Jun, 2022
Like Article
Save Article