mirror of
https://github.com/Manoj-HV30/ds-lab-codes.git
synced 2026-05-16 19:35:22 +00:00
Improve delete_value function logic
Refactor delete_value function to handle head, last, and middle node deletions more clearly.
This commit is contained in:
+23
-8
@@ -24,6 +24,7 @@ void insert(int value) {
|
|||||||
newNode->data = value;
|
newNode->data = value;
|
||||||
newNode->next = NULL;
|
newNode->next = NULL;
|
||||||
|
|
||||||
|
/* Case 1: Empty list */
|
||||||
if (head == NULL) {
|
if (head == NULL) {
|
||||||
newNode->prev = NULL;
|
newNode->prev = NULL;
|
||||||
head = newNode;
|
head = newNode;
|
||||||
@@ -31,6 +32,7 @@ void insert(int value) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Case 2: List not empty → go to last node */
|
||||||
temp = head;
|
temp = head;
|
||||||
while (temp->next != NULL) {
|
while (temp->next != NULL) {
|
||||||
temp = temp->next;
|
temp = temp->next;
|
||||||
@@ -42,32 +44,44 @@ void insert(int value) {
|
|||||||
printf("Inserted %d\n", value);
|
printf("Inserted %d\n", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Delete node by value */
|
/* Delete node by value (HEAD / MIDDLE / LAST handled) */
|
||||||
void delete_value(int value) {
|
void delete_value(int value) {
|
||||||
NODE *temp = head;
|
NODE *temp = head;
|
||||||
|
|
||||||
|
/* Case 0: Empty list */
|
||||||
if (head == NULL) {
|
if (head == NULL) {
|
||||||
printf("List is empty\n");
|
printf("List is empty\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Search for the node */
|
||||||
while (temp != NULL && temp->data != value) {
|
while (temp != NULL && temp->data != value) {
|
||||||
temp = temp->next;
|
temp = temp->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Value not found */
|
||||||
if (temp == NULL) {
|
if (temp == NULL) {
|
||||||
printf("Element not found\n");
|
printf("Element not found\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (temp == head) {
|
/* Case 1: Deleting HEAD node */
|
||||||
head = temp->next;
|
if (temp->prev == NULL) {
|
||||||
if (head != NULL)
|
head = temp->next; // move head forward
|
||||||
head->prev = NULL;
|
if (head != NULL) {
|
||||||
} else {
|
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;
|
temp->prev->next = temp->next;
|
||||||
if (temp->next != NULL)
|
temp->next->prev = temp->prev;
|
||||||
temp->next->prev = temp->prev;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free(temp);
|
free(temp);
|
||||||
@@ -105,6 +119,7 @@ int main() {
|
|||||||
scanf("%d", &choice);
|
scanf("%d", &choice);
|
||||||
|
|
||||||
switch (choice) {
|
switch (choice) {
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
printf("Enter value: ");
|
printf("Enter value: ");
|
||||||
scanf("%d", &value);
|
scanf("%d", &value);
|
||||||
|
|||||||
Reference in New Issue
Block a user