Bird
0
0
DSA Cprogramming~20 mins

Delete Node by Value in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Linked List Deletion Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output after deleting a node by value in a singly linked list
What is the printed linked list after deleting the node with value 3?
DSA C
typedef struct Node {
    int data;
    struct Node* next;
} Node;

#include <stdio.h>
#include <stdlib.h>

void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

Node* deleteNodeByValue(Node* head, int value) {
    Node* temp = head;
    Node* prev = NULL;
    while (temp != NULL && temp->data != value) {
        prev = temp;
        temp = temp->next;
    }
    if (temp == NULL) return head;
    if (prev == NULL) {
        head = temp->next;
    } else {
        prev->next = temp->next;
    }
    free(temp);
    return head;
}

int main() {
    Node* head = malloc(sizeof(Node));
    head->data = 1;
    head->next = malloc(sizeof(Node));
    head->next->data = 2;
    head->next->next = malloc(sizeof(Node));
    head->next->next->data = 3;
    head->next->next->next = malloc(sizeof(Node));
    head->next->next->next->data = 4;
    head->next->next->next->next = NULL;

    head = deleteNodeByValue(head, 3);
    printList(head);
    return 0;
}
A1 -> 2 -> 3 -> 4 -> NULL
B1 -> 2 -> 4 -> NULL
C2 -> 3 -> 4 -> NULL
D1 -> 3 -> 4 -> NULL
Attempts:
2 left
💡 Hint
Think about how the node with value 3 is removed and how the links are updated.
Predict Output
intermediate
2:00remaining
Output when deleting the head node by value
What is the printed linked list after deleting the node with value 1 (the head)?
DSA C
typedef struct Node {
    int data;
    struct Node* next;
} Node;

#include <stdio.h>
#include <stdlib.h>

void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

Node* deleteNodeByValue(Node* head, int value) {
    Node* temp = head;
    Node* prev = NULL;
    while (temp != NULL && temp->data != value) {
        prev = temp;
        temp = temp->next;
    }
    if (temp == NULL) return head;
    if (prev == NULL) {
        head = temp->next;
    } else {
        prev->next = temp->next;
    }
    free(temp);
    return head;
}

int main() {
    Node* head = malloc(sizeof(Node));
    head->data = 1;
    head->next = malloc(sizeof(Node));
    head->next->data = 2;
    head->next->next = malloc(sizeof(Node));
    head->next->next->data = 3;
    head->next->next->next = NULL;

    head = deleteNodeByValue(head, 1);
    printList(head);
    return 0;
}
A3 -> NULL
B1 -> 2 -> 3 -> NULL
CNULL
D2 -> 3 -> NULL
Attempts:
2 left
💡 Hint
Deleting the head means the new head is the next node.
🔧 Debug
advanced
2:00remaining
Identify the error in deleting a node by value
What error will this code cause when deleting a node by value?
DSA C
Node* deleteNodeByValue(Node* head, int value) {
    Node* temp = head;
    Node* prev = NULL;
    while (temp->data != value) {
        prev = temp;
        temp = temp->next;
    }
    if (prev == NULL) {
        head = temp->next;
    } else {
        prev->next = temp->next;
    }
    free(temp);
    return head;
}
ASegmentation fault (accessing NULL pointer)
BMemory leak (node not freed)
CNo error, works correctly
DCompilation error (missing return statement)
Attempts:
2 left
💡 Hint
Consider what happens if the value is not found in the list.
🧠 Conceptual
advanced
1:00remaining
Effect of deleting a non-existent value in linked list
What happens if you try to delete a node with a value not present in the linked list?
AThe list remains unchanged
BThe last node is deleted
CThe head node is deleted
DThe entire list is deleted
Attempts:
2 left
💡 Hint
Think about the search process for the value.
Predict Output
expert
3:00remaining
Output after multiple deletions by value in linked list
What is the printed linked list after deleting nodes with values 2 and 4 in order?
DSA C
typedef struct Node {
    int data;
    struct Node* next;
} Node;

#include <stdio.h>
#include <stdlib.h>

void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

Node* deleteNodeByValue(Node* head, int value) {
    Node* temp = head;
    Node* prev = NULL;
    while (temp != NULL && temp->data != value) {
        prev = temp;
        temp = temp->next;
    }
    if (temp == NULL) return head;
    if (prev == NULL) {
        head = temp->next;
    } else {
        prev->next = temp->next;
    }
    free(temp);
    return head;
}

int main() {
    Node* head = malloc(sizeof(Node));
    head->data = 1;
    head->next = malloc(sizeof(Node));
    head->next->data = 2;
    head->next->next = malloc(sizeof(Node));
    head->next->next->data = 3;
    head->next->next->next = malloc(sizeof(Node));
    head->next->next->next->data = 4;
    head->next->next->next->next = malloc(sizeof(Node));
    head->next->next->next->next->data = 5;
    head->next->next->next->next->next = NULL;

    head = deleteNodeByValue(head, 2);
    head = deleteNodeByValue(head, 4);
    printList(head);
    return 0;
}
A1 -> 2 -> 3 -> 5 -> NULL
B3 -> 5 -> NULL
C1 -> 3 -> 5 -> NULL
D1 -> 3 -> 4 -> 5 -> NULL
Attempts:
2 left
💡 Hint
Delete nodes one by one and update the list each time.