Rotate Doubly Linked List Python
- Get link
- X
- Other Apps
PROGRAM TO ROTATE DOUBLY LINKED LIST BY N NODES
class
Node:
def
__init__(
self
,
next
=
None
,
prev
=
None
, data
=
None
):
self
.
next
=
next
# reference to next node in DLL
self
.prev
=
prev
# reference to previous node in DLL
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
# Let us understand the below code
# for example N = 2 and
# list = a <-> b <-> c <-> d <-> e.
current
=
start
# current will either point to Nth
# or None after this loop. Current
# will point to node 'b' in the
# above example
count
=
1
while
count < N
and
current !
=
None
:
current
=
current.
next
count
+
=
1
# If current is None, N is greater
# than or equal to count of nodes
# in linked list. Don't change the
# list in this case
if
current
=
=
None
:
return
# current points to Nth node. Store
# it in a variable. NthNode points to
# node 'b' in the above example
NthNode
=
current
# current will point to last node
# after this loop current will point
# to node 'e' in the above example
while
current.
next
!
=
None
:
current
=
current.
next
# Change next of last node to previous
# head. Next of 'e' is now changed to
# node 'a'
current.
next
=
start
# Change prev of Head node to current
# Prev of 'a' is now changed to node 'e'
start.prev
=
current
# Change head to (N+1)th node
# head is now changed to node 'c'
start
=
NthNode.
next
# Change prev of New Head node to None
# Because Prev of Head Node in Doubly
# linked list is None
start.prev
=
None
# change next of Nth node to None
# next of 'b' is now None
NthNode.
next
=
None
return
start
# Driver Code
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"
)
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
- Get link
- X
- Other Apps
Comments
Post a Comment