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!