Improve delete_value function logic

Refactor delete_value function to handle head, last, and middle node deletions more clearly.
This commit is contained in:
2026-01-22 17:50:50 +05:30
committed by GitHub
parent 784f982a64
commit c96ab0913f
+22 -7
View File
@@ -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,31 +44,43 @@ 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;
}
@@ -105,6 +119,7 @@ int main() {
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter value: ");
scanf("%d", &value);