Python3 Program to Rotate Doubly linked list by N nodes
Last Updated :
08 Jun, 2022
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.
Python3
class Node:
def __init__( self , next = None ,
prev = None , data = None ):
self . next = next
self .prev = prev
self .data = data
def push(head, new_data):
new_node = Node(data = new_data)
new_node. next = head
new_node.prev = None
if head is not None :
head.prev = new_node
head = new_node
return head
def printList(head):
node = head
print ( "Given linked list" )
while (node is not None ):
print (node.data, end = " " ),
last = node
node = node. next
def rotate(start, N):
if N = = 0 :
return
current = start
count = 1
while count < N and current ! = None :
current = current. next
count + = 1
if current = = None :
return
NthNode = current
while current. next ! = None :
current = current. next
current. next = start
start.prev = current
start = NthNode. next
start.prev = None
NthNode. next = None
return start
if __name__ = = "__main__" :
head = None
head = push(head, 'e' )
head = push(head, 'd' )
head = push(head, 'c' )
head = push(head, 'b' )
head = push(head, 'a' )
printList(head)
print ("
")
N = 2
head = rotate(head, N)
printList(head)
|
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!
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...