From c96ab0913fd797feafbdaaf60af3a8a5426345bb Mon Sep 17 00:00:00 2001 From: Wander_lust Date: Thu, 22 Jan 2026 17:50:50 +0530 Subject: [PATCH] Improve delete_value function logic Refactor delete_value function to handle head, last, and middle node deletions more clearly. --- DoublyLL.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/DoublyLL.c b/DoublyLL.c index 134d337..beec4cb 100644 --- a/DoublyLL.c +++ b/DoublyLL.c @@ -24,6 +24,7 @@ void insert(int value) { newNode->data = value; newNode->next = NULL; + /* Case 1: Empty list */ if (head == NULL) { newNode->prev = NULL; head = newNode; @@ -31,6 +32,7 @@ void insert(int value) { return; } + /* Case 2: List not empty → go to last node */ temp = head; while (temp->next != NULL) { temp = temp->next; @@ -42,32 +44,44 @@ void insert(int value) { printf("Inserted %d\n", value); } -/* Delete node by value */ +/* Delete node by value (HEAD / MIDDLE / LAST handled) */ void delete_value(int value) { NODE *temp = head; + /* Case 0: Empty list */ if (head == NULL) { printf("List is empty\n"); return; } + /* Search for the node */ while (temp != NULL && temp->data != value) { temp = temp->next; } + /* Value not found */ if (temp == NULL) { printf("Element not found\n"); return; } - if (temp == head) { - head = temp->next; - if (head != NULL) - head->prev = NULL; - } else { + /* Case 1: Deleting HEAD node */ + if (temp->prev == NULL) { + head = temp->next; // move head forward + if (head != NULL) { + head->prev = NULL; // new head prev must be NULL + } + } + + /* Case 2: Deleting LAST node */ + else if (temp->next == NULL) { + temp->prev->next = NULL; + } + + /* Case 3: Deleting MIDDLE node */ + else { temp->prev->next = temp->next; - if (temp->next != NULL) - temp->next->prev = temp->prev; + temp->next->prev = temp->prev; } free(temp); @@ -105,6 +119,7 @@ int main() { scanf("%d", &choice); switch (choice) { + case 1: printf("Enter value: "); scanf("%d", &value);