We have discussed doubly circular linked list introduction and its insertion.
Let us formulate the problem statement to understand the deletion process. Given a ‘key’, delete the first occurrence of this key in circular doubly linked list.
Case 1: Empty List(start = NULL)
- If the list is empty, simply return.
Case 2:List initially contain some nodes, start points to first node of the List
- If the list is not empty then we define two pointers curr and prev_1 and initialize the pointer curr points to first node of the list and prev_1 = NULL.
- Traverse the list using curr pointer to find the node to be deleted and before moving curr to next node, every time set prev_1 = curr.
- If the node is found, check if it is the only node in the list. If yes, set start = NULL and free the node pointing by curr.
- If the list has more than one node, check if it is the first node of the list. Condition to check this is (curr == start). If yes, then move prev_1 to the last node(prev_1 = start -> prev). After prev_1 reaches the last node, set start = start -> next and prev_1 -> next = start and start -> prev = prev_1. Free the node pointing by curr.
- If curr is not first node, we check if it is the last node in the list. Condition to check this is (curr -> next == start). If yes, set prev_1 -> next = start and start -> prev = prev_1. Free the node pointing by curr.
- If the node to be deleted is neither the first node nor the last node, declare one more pointer temp and initialize the pointer temp points to next of curr pointer (temp = curr->next). Now set, prev_1 -> next = temp and temp ->prev = prev_1. Free the node pointing by curr.
- If the given key(Say 4) matches with first node of the list(Step 4):
- If the given key(Say 8) matches with last node of the list(Step 5):
- If the given key(Say 6) matches with middle node of the list(Step 6):
List Before Deletion: 4 5 6 7 8 List doesn't have node with value = 9 List After Deletion: 4 5 6 7 8 List After Deleting 4: 5 6 7 8 List After Deleting 8: 5 6 7 List After Deleting 6: 5 7
This article is contributed by Akash Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Deletion at different positions in a Circular Linked List
- Deletion from a Circular Linked List
- Doubly Circular Linked List | Set 1 (Introduction and Insertion)
- Convert a given Binary Tree to Circular Doubly Linked List | Set 2
- XOR Linked List - A Memory Efficient Doubly Linked List | Set 1
- XOR Linked List – A Memory Efficient Doubly Linked List | Set 2
- Circular Queue | Set 2 (Circular Linked List Implementation)
- Insertion at Specific Position in a Circular Doubly Linked List
- Convert an Array to a Circular Doubly Linked List
- Reverse a doubly circular linked list
- Search an Element in Doubly Circular Linked List
- Remove all even parity nodes from a Doubly and Circular Singly Linked List
- Difference between Singly linked list and Doubly linked list
- Convert singly linked list into circular linked list
- Check if a linked list is Circular Linked List
- Sorted merge of two sorted doubly circular linked lists
- Construct a Doubly linked linked list from 2D Matrix
- Convert a Binary Tree to a Circular Doubly Link List
- Convert a given Binary Tree to Doubly Linked List | Set 1
- Convert a given Binary Tree to Doubly Linked List | Set 2