In: Computer Science
What is are the correct code implementations to remove a node from a circular doubly linked list from the beginning, middle, and end? Using only a dummy node and a pointer in the code implementation for the removal of the last/end node.
# Python implementation to delete
# a doubly Linked List node
# at the given position
# A node of the doubly linked list
class
Node:
# Constructor to
create a new node
def
__init__(
self
, data):
self
.data
=
data
self
.
next
=
None
self
.prev
=
None
# Function to delete a node in a Doubly Linked
List.
# head_ref -. pointer to head node pointer.
# del -. pointer to node to be deleted.
def
deleteNode(head_ref, del_):
# base
case
if
(head_ref
=
=
None
or
del_
=
=
None
):
return
# If node to be
deleted is head node
if
(head_ref
=
=
del_):
head_ref
=
del_.
next
# Change next only if
node to be deleted is NOT
# the last
node
if
(del_.
next
!
=
None
):
del_.
next
.prev
=
del_.prev
# Change prev only if
node to be deleted is NOT
# the first
node
if
(del_.prev !
=
None
):
del_.prev.
next
=
del_.
next
return
head_ref
# Function to delete the node at the given
position
# in the doubly linked list
def
deleteNodeAtGivenPos(head_ref,n):
# if list in None or
invalid position is given
if
(head_ref
=
=
None
or
n <
=
0
):
return
current
=
head_ref
i
=
1
# traverse up to the
node at position 'n' from
# the
beginning
while
(
current !
=
None
and
i < n ):
current
=
current.
next
i
=
i
+
1
# if 'n' is greater
than the number of nodes
# in the doubly
linked list
if
(current
=
=
None
):
return
# delete the node
pointed to by 'current'
deleteNode(head_ref,
current)
return
head_ref
# Function to insert a node at the beginning
# of the Doubly Linked List
def
push(head_ref, new_data):
# allocate
node
new_node
=
Node(
0
)
# put in the
data
new_node.data
=
new_data
# since we are adding
at the beginning,
#prev is always
None
new_node.prev
=
None
# link the old list
off the new node
new_node.
next
=
(head_ref)
# change prev of head
node to new node
if
((head_ref) !
=
None
):
(head_ref).prev
=
new_node
# move the head to
point to the new node
(head_ref)
=
new_node
return
head_ref
# Function to print nodes in a given doubly
# linked list
def
printList(head):
while
(head !
=
None
)
:
print
(
head.data ,end
=
"
"
)
head
=
head.
next
# Driver program to test above functions
# Start with the empty list
head
=
None
# Create the doubly linked list
10<.8<.4<.2<.5
head
=
push(head,
5
)
head
=
push(head,
2
)
head
=
push(head,
4
)
head
=
push(head,
8
)
head
=
push(head,
10
)
print
(
"Doubly linked list before
deletion:"
)
printList(head)
n
=
2
# delete node at the given position 'n'
head
=
deleteNodeAtGivenPos(head, n)
print
(
"\nDoubly linked list
after deletion:"
)
printList(head)
Please Give a thumps up for the answer!