📖 Scenario: You are managing a list of tasks in a to-do app. Each task is stored as a node in a singly linked list. Sometimes, you need to remove a task by its name when it is completed or no longer needed.
🎯 Goal: Build a program that creates a singly linked list of tasks, sets the task name to delete, deletes the node with that task name from the list, and prints the updated list.
📋 What You'll Learn
Create a singly linked list with exact tasks: 'Laundry', 'Grocery', 'Homework', 'Exercise', 'Call Mom'
Create a variable called task_to_delete with the value 'Homework'
Write a function delete_node_by_value(head, value) that deletes the first node with the given value
Print the linked list after deletion in the format: Task1 -> Task2 -> ... -> null
💡 Why This Matters
🌍 Real World
Linked lists are used in many apps to manage ordered data like tasks, playlists, or history where items can be added or removed dynamically.
💼 Career
Understanding linked list operations like deletion is important for software development roles that involve data structure manipulation and memory management.
Progress0 / 4 steps
1
Create the singly linked list with tasks
Create a class called Node with attributes data and next. Then create nodes for tasks 'Laundry', 'Grocery', 'Homework', 'Exercise', and 'Call Mom' linked in that order. Assign the head of the list to a variable called head.
DSA Python
Hint
Start by defining the Node class with data and next. Then link the nodes in order.
2
Set the task to delete
Create a variable called task_to_delete and set it to the string 'Homework'.
DSA Python
Hint
Just assign the string 'Homework' to the variable task_to_delete.
3
Write the function to delete a node by value
Write a function called delete_node_by_value(head, value) that deletes the first node in the linked list whose data matches value. The function should return the new head of the list. Handle the case where the node to delete is the head.
DSA Python
Hint
Check if the head node has the value. If yes, return head.next. Otherwise, loop through nodes to find and remove the matching node.
4
Delete the node and print the updated list
Call delete_node_by_value(head, task_to_delete) and assign the result back to head. Then print the linked list nodes' data separated by ' -> ' and ending with 'null'.
DSA Python
Hint
Call the delete function and then loop through the list to print each task followed by ' -> ', ending with 'null'.
Practice
(1/5)
1. What does the operation Delete Node by Value do in a linked list?
easy
A. Removes the first node that contains the given value
B. Adds a new node with the given value at the end
C. Finds the node with the given value without removing it
D. Reverses the linked list
Solution
Step 1: Understand the operation
Deleting a node by value means removing the first node that matches the given value from the linked list.
Step 2: Compare options
Only Removes the first node that contains the given value describes removing the first node with the given value. Others describe different operations.
Final Answer:
Removes the first node that contains the given value -> Option A
Quick Check:
Delete Node by Value = Remove first matching node [OK]
Hint: Delete node by value removes first matching node [OK]
Common Mistakes:
Confusing deletion by value with adding a node
Thinking it deletes all nodes with the value
Mixing deletion by value with reversing the list
2. Which of the following is the correct Python syntax to delete a node by value from a singly linked list?
easy
A. def delete_node(head, value):
current = head
while current:
if current.val == value:
current = current.next
break
current = current.next
B. def delete_node(head, value):
prev = None
current = head
while current:
if current.val == value:
if prev:
prev.next = current.next
else:
head = current.next
break
prev = current
current = current.next
return head
C. def delete_node(head, value):
for node in head:
if node.val == value:
head.remove(node)
break
return head
D. def delete_node(head, value):
head = [x for x in head if x != value]
return head
Solution
Step 1: Analyze the deletion logic
Deleting a node requires tracking the previous node to update its next pointer. def delete_node(head, value):
prev = None
current = head
while current:
if current.val == value:
if prev:
prev.next = current.next
else:
head = current.next
break
prev = current
current = current.next
return head correctly uses prev and current pointers and updates links properly.
Step 2: Check other options
def delete_node(head, value):
current = head
while current:
if current.val == value:
current = current.next
break
current = current.next only moves current pointer without changing links. def delete_node(head, value):
for node in head:
if node.val == value:
head.remove(node)
break
return head uses invalid iteration on linked list nodes. def delete_node(head, value):
head = [x for x in head if x != value]
return head treats linked list as a list, which is incorrect.
Final Answer:
Option B code correctly deletes node by value in a singly linked list -> Option B
Quick Check:
Proper pointer update = def delete_node(head, value):
prev = None
current = head
while current:
if current.val == value:
if prev:
prev.next = current.next
else:
head = current.next
break
prev = current
current = current.next
return head [OK]
Hint: Use prev and current pointers to update links [OK]
Common Mistakes:
Not updating previous node's next pointer
Trying to iterate linked list like a Python list
Not returning updated head after deletion
3. What will be the output linked list after deleting value 3 from the list: 1 -> 3 -> 5 -> 3 -> 7 -> null?
class Node:
def __init__(self, val):
self.val = val
self.next = None
def delete_node(head, value):
prev = None
current = head
while current:
if current.val == value:
if prev:
prev.next = current.next
else:
head = current.next
break
prev = current
current = current.next
return head
# Create list
head = Node(1)
head.next = Node(3)
head.next.next = Node(5)
head.next.next.next = Node(3)
head.next.next.next.next = Node(7)
head = delete_node(head, 3)
# Print list
current = head
result = []
while current:
result.append(current.val)
current = current.next
print(result)
medium
A. [1, 5, 3, 7]
B. [1, 3, 5, 7]
C. [3, 5, 3, 7]
D. [1, 5, 7]
Solution
Step 1: Identify the first node with value 3
The list is 1 -> 3 -> 5 -> 3 -> 7. The first node with value 3 is the second node.
Step 2: Delete the first 3 and link previous node to next
After deletion, the list becomes 1 -> 5 -> 3 -> 7.
Hint: Delete only first matching node, keep rest intact [OK]
Common Mistakes:
Deleting all nodes with value 3 instead of first only
Not updating head when first node matches
Skipping nodes after deletion
4. The following code tries to delete a node by value from a linked list but causes an error. What is the error?
def delete_node(head, value):
current = head
while current.next:
if current.next.val == value:
current.next = current.next.next
break
current = current.next
return head
medium
A. Fails when the value is not found
B. Fails when the list is empty
C. Fails when the node to delete is the last node
D. Fails when the node to delete is the head node
Solution
Step 1: Analyze deletion logic
The code checks current.next.val to find the node to delete, so it cannot delete the head node if it matches the value.
Step 2: Check edge cases
If the head node has the value, the code never deletes it because it only looks at current.next.
Final Answer:
Fails when the node to delete is the head node -> Option D
Quick Check:
Head node deletion not handled = Fails when the node to delete is the head node [OK]
Hint: Check if head node matches before loop [OK]
Common Mistakes:
Not handling deletion of head node separately
Assuming current.next always exists without check
Ignoring empty list case
5. You have a singly linked list: 10 -> 20 -> 30 -> 40 -> 50 -> null. You want to delete the node with value 10 and then insert a new node with value 15 after the node with value 20. What will be the final linked list?
Choose the correct sequence of operations and final list.
Options:
A) Delete 10, insert 15 after 20: 20 -> 15 -> 30 -> 40 -> 50
B) Delete 10, insert 15 after 20: 10 -> 20 -> 15 -> 30 -> 40 -> 50
C) Delete 10, insert 15 after 20: 20 -> 30 -> 15 -> 40 -> 50
D) Delete 10, insert 15 after 20: 15 -> 20 -> 30 -> 40 -> 50
hard
A. 20 -> 30 -> 15 -> 40 -> 50
B. 10 -> 20 -> 15 -> 30 -> 40 -> 50
C. 20 -> 15 -> 30 -> 40 -> 50
D. 15 -> 20 -> 30 -> 40 -> 50
Solution
Step 1: Delete node with value 10
Since 10 is the head, deleting it makes 20 the new head. List becomes 20 -> 30 -> 40 -> 50.
Step 2: Insert node with value 15 after node with value 20
Find node 20, insert 15 after it. List becomes 20 -> 15 -> 30 -> 40 -> 50.
Final Answer:
20 -> 15 -> 30 -> 40 -> 50 -> Option C
Quick Check:
Delete head 10, insert 15 after 20 = 20 -> 15 -> 30 -> 40 -> 50 [OK]
Hint: Delete head carefully, then insert after target node [OK]
Common Mistakes:
Not updating head after deleting first node
Inserting new node in wrong position
Confusing node values and positions
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.