📖 Scenario: Imagine you have a list of tasks to do, and you want to remove a task at a certain position from your list.
🎯 Goal: You will create a simple linked list of tasks, then write code to delete a node at a specific position, and finally print the updated list.
📋 What You'll Learn
Create a linked list with exactly 5 nodes containing the values 10, 20, 30, 40, 50
Create an integer variable called position and set it to 3
Write a function called deleteNodeAtPosition that deletes the node at the given position
Print the linked list after deletion in the format: 10 -> 20 -> 40 -> 50 -> NULL
💡 Why This Matters
🌍 Real World
Linked lists are used in many applications like task scheduling, undo functionality, and dynamic memory management where items need to be added or removed efficiently.
💼 Career
Understanding linked list operations like deletion is essential for software developers working with low-level data structures, embedded systems, or performance-critical applications.
Progress0 / 4 steps
1
Create the linked list with 5 nodes
Create a linked list with 5 nodes containing the values 10, 20, 30, 40, and 50. Use a struct called Node with an integer data and a pointer next. Create a pointer called head that points to the first node.
DSA C
Hint
Start by defining the Node struct with data and next. Then create 5 nodes using malloc and link them in order.
2
Set the position to delete
Create an integer variable called position and set it to 3 to represent the node position to delete.
DSA C
Hint
Just create an integer variable named position and assign it the value 3.
3
Write the function to delete node at position
Write a function called deleteNodeAtPosition that takes Node** head and int position as parameters. It deletes the node at the given position from the linked list. Call this function from main using &head and position.
DSA C
Hint
Write a function that handles deleting the first node separately. For other positions, find the node before the one to delete, then adjust pointers and free memory.
4
Print the linked list after deletion
Write a loop to print the linked list starting from head. Print each node's data followed by ->. After the last node, print NULL. This will show the list after deleting the node at position 3.
DSA C
Hint
Use a while loop to go through each node starting from head. Print the data and -> if there is a next node. End with NULL.
Practice
(1/5)
1. What happens when you delete a node at position 1 in a singly linked list?
easy
A. The list remains unchanged
B. The last node is removed
C. The head node is removed and the next node becomes the new head
D. All nodes are deleted
Solution
Step 1: Understand position 1 in linked list
Position 1 refers to the head node of the list.
Step 2: Deleting the head node
Removing the head means the next node becomes the new head.
Final Answer:
The head node is removed and the next node becomes the new head -> Option C
Quick Check:
Deleting position 1 removes head [OK]
Hint: Deleting position 1 always removes the head node [OK]
Common Mistakes:
Thinking position 1 deletes the last node
Assuming list stays same after deletion
Deleting all nodes instead of one
2. Which of the following is the correct syntax to delete a node at position pos in a singly linked list in C?
easy
A. void deleteNode(struct Node* head, int pos);
B. void deleteNode(struct Node** head_ref, int pos);
C. void deleteNode(int pos, struct Node* head);
D. void deleteNode(int pos);
Solution
Step 1: Understand pointer usage for head modification
To delete a node, the function must modify the head pointer if position 1 is deleted, so it needs a pointer to pointer.
Step 2: Check function parameters
Only void deleteNode(struct Node** head_ref, int pos); uses struct Node** head_ref allowing head modification.
Final Answer:
void deleteNode(struct Node** head_ref, int pos); -> Option B
Quick Check:
Use pointer to pointer for head changes [OK]
Hint: Use double pointer to head to delete at any position [OK]
Common Mistakes:
Using single pointer and expecting head to change
Wrong parameter order
Missing head pointer in parameters
3. Given the linked list: 10 -> 20 -> 30 -> 40 -> 50 -> NULL, what is the list after deleting the node at position 3?
medium
A. 10 -> 20 -> 40 -> 50 -> NULL
B. 10 -> 20 -> 30 -> 50 -> NULL
C. 10 -> 30 -> 40 -> 50 -> NULL
D. 20 -> 30 -> 40 -> 50 -> NULL
Solution
Step 1: Identify node at position 3
Position 3 node is 30 in the list.
Step 2: Remove node 30 and link previous to next
Link node 20 to node 40, skipping 30.
Final Answer:
10 -> 20 -> 40 -> 50 -> NULL -> Option A
Quick Check:
Deleted 3rd node (30) correctly [OK]
Hint: Skip the node at position by linking previous to next [OK]
Common Mistakes:
Deleting wrong node position
Not updating links correctly
Removing head instead of position 3
4. Consider this code snippet to delete a node at position pos in a linked list:
void deleteNode(struct Node** head_ref, int pos) {
struct Node* temp = *head_ref;
if (pos == 1) {
*head_ref = temp->next;
free(temp);
return;
}
for (int i = 1; temp != NULL && i < pos - 1; i++) {
temp = temp->next;
}
if (temp == NULL || temp->next == NULL) return;
struct Node* next = temp->next->next;
free(temp->next);
temp->next = next;
}
What is the bug in this code?
medium
A. It does not handle empty list when pos is 1
B. It frees the wrong node
C. It does not update head pointer correctly
D. It does not check if pos is valid
Solution
Step 1: Check deletion at position 1
If list is empty (*head_ref is NULL), temp is NULL, so temp->next causes error.
Step 2: Identify missing empty list check
Code should check if temp is NULL before accessing temp->next when pos == 1.
Final Answer:
It does not handle empty list when pos is 1 -> Option A
Quick Check:
Empty list check missing at head deletion [OK]
Hint: Always check if list is empty before deleting [OK]
Common Mistakes:
Ignoring empty list case
Assuming pos is always valid
Not freeing the deleted node
5. You have a singly linked list: 5 -> 10 -> 15 -> 20 -> 25 -> NULL. You want to delete the node at position 6. What should happen after calling the delete function?
hard
A. The last node (25) is deleted
B. The function crashes due to invalid position
C. The head node (5) is deleted
D. The list remains unchanged because position 6 is invalid
Solution
Step 1: Check if position 6 exists in list
List has 5 nodes, so position 6 is invalid.
Step 2: Behavior on invalid position
Proper delete function should do nothing if position is invalid, leaving list unchanged.
Final Answer:
The list remains unchanged because position 6 is invalid -> Option D
Quick Check:
Invalid position means no deletion [OK]
Hint: Invalid position means no change to list [OK]
Common Mistakes:
Deleting last node incorrectly
Crashing due to no position check
Deleting head by mistake
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.