Write a function to delete a given node in a doubly linked list.

     (a) Original Doubly Linked List

Delete a node in a Doubly Linked List

     (a) After deletion of head node

Delete a node in a Doubly Linked List

     (a) After deletion of middle node

Delete a node in a Doubly Linked List

     (a) After deletion of last node

Delete a node in a Doubly Linked List

Algorithm:
Let the node to be deleted is del.
1) If node to be deleted is head node, then change the head pointer to next current head.
2) Set next of previous to del, if previous to del exixts.
3) Set prev of next to del, if next to del exixts.

[ad type=”banner”]

Python Programming:

[pastacode lang=”python” manual=”%23%20Program%20to%20delete%20a%20node%20in%20doubly%20linked%20list%0A%20%0A%23%20for%20Garbage%20collection%0Aimport%20gc%0A%20%0A%23%20A%20node%20of%20the%20doublly%20linked%20list%0Aclass%20Node%3A%0A%20%20%20%20%20%0A%20%20%20%20%23%20Constructor%20to%20create%20a%20new%20node%0A%20%20%20%20def%20__init__(self%2C%20data)%3A%0A%20%20%20%20%20%20%20%20self.data%20%3D%20data%20%0A%20%20%20%20%20%20%20%20self.next%20%3D%20None%0A%20%20%20%20%20%20%20%20self.prev%20%3D%20None%0A%20%0Aclass%20DoublyLinkedList%3A%0A%20%20%20%20%20%23%20Constructor%20for%20empty%20Doubly%20Linked%20List%0A%20%20%20%20def%20__init__(self)%3A%0A%20%20%20%20%20%20%20%20self.head%20%3D%20None%0A%20%20%0A%20%20%20%23%20Function%20to%20delete%20a%20node%20in%20a%20Doubly%20Linked%20List.%0A%20%20%20%23%20head_ref%20–%3E%20pointer%20to%20head%20node%20pointer.%0A%20%20%20%23%20dele%20–%3E%20pointer%20to%20node%20to%20be%20deleted%0A%20%0A%20%20%20%20def%20deleteNode(self%2C%20dele)%3A%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%23%20Base%20Case%0A%20%20%20%20%20%20%20%20if%20self.head%20is%20None%20or%20dele%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%23%20If%20node%20to%20be%20deleted%20is%20head%20node%0A%20%20%20%20%20%20%20%20if%20self.head%20%3D%3D%20dele%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.head%20%3D%20dele.next%0A%20%0A%20%20%20%20%20%20%20%20%23%20Change%20next%20only%20if%20node%20to%20be%20deleted%20is%20NOT%0A%20%20%20%20%20%20%20%20%23%20the%20last%20node%0A%20%20%20%20%20%20%20%20if%20dele.next%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20dele.next.prev%20%3D%20dele.prev%0A%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%23%20Change%20prev%20only%20if%20node%20to%20be%20deleted%20is%20NOT%20%0A%20%20%20%20%20%20%20%20%23%20the%20first%20node%0A%20%20%20%20%20%20%20%20if%20dele.prev%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20dele.prev.next%20%3D%20dele.next%0A%20%20%20%20%20%20%20%20%23%20Finally%2C%20free%20the%20memory%20occupied%20by%20dele%0A%20%20%20%20%20%20%20%20%23%20Call%20python%20garbage%20collector%0A%20%20%20%20%20%20%20%20gc.collect()%0A%20%0A%20%0A%20%20%20%20%23%20Given%20a%20reference%20to%20the%20head%20of%20a%20list%20and%20an%0A%20%20%20%20%23%20integer%2Cinserts%20a%20new%20node%20on%20the%20front%20of%20list%0A%20%20%20%20def%20push(self%2C%20new_data)%3A%0A%20%20%0A%20%20%20%20%20%20%20%20%23%201.%20Allocates%20node%0A%20%20%20%20%20%20%20%20%23%202.%20Put%20the%20data%20in%20it%0A%20%20%20%20%20%20%20%20new_node%20%3D%20Node(new_data)%0A%20%20%0A%20%20%20%20%20%20%20%20%23%203.%20Make%20next%20of%20new%20node%20as%20head%20and%0A%20%20%20%20%20%20%20%20%23%20previous%20as%20None%20(already%20None)%0A%20%20%20%20%20%20%20%20new_node.next%20%3D%20self.head%0A%20%20%0A%20%20%20%20%20%20%20%20%23%204.%20change%20prev%20of%20head%20node%20to%20new_node%0A%20%20%20%20%20%20%20%20if%20self.head%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.head.prev%20%3D%20new_node%0A%20%20%0A%20%20%20%20%20%20%20%20%23%205.%20move%20the%20head%20to%20point%20to%20the%20new%20node%0A%20%20%20%20%20%20%20%20self.head%20%3D%20new_node%0A%20%0A%20%0A%20%20%20%20def%20printList(self%2C%20node)%3A%0A%20%20%20%20%20%20%20%20while(node%20is%20not%20None)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20node.data%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20node%20%3D%20node.next%0A%20%0A%20%0A%23%20Driver%20program%20to%20test%20the%20above%20functions%0A%20%0A%23%20Start%20with%20empty%20list%0Adll%20%3D%20DoublyLinkedList()%0A%20%0A%23%20Let%20us%20create%20the%20doubly%20linked%20list%2010%3C-%3E8%3C-%3E4%3C-%3E2%0Adll.push(2)%3B%0Adll.push(4)%3B%0Adll.push(8)%3B%0Adll.push(10)%3B%0A%20%0Aprint%20%22%5Cn%20Original%20Linked%20List%22%2C%0Adll.printList(dll.head)%0A%20%0A%23%20delete%20nodes%20from%20doubly%20linked%20list%0Adll.deleteNode(dll.head)%0Adll.deleteNode(dll.head.next)%0Adll.deleteNode(dll.head.next)%0A%23%20Modified%20linked%20list%20will%20be%20NULL%3C-8-%3ENULL%0Aprint%20%22%5Cn%20Modified%20Linked%20List%22%2C%0Adll.printList(dll.head)%0A%20″ message=”” highlight=”” provider=”manual”/]

Time Complexity: O(1)
Time Complexity: O(1)

 

[ad type=”banner”]