📖 Scenario: You are managing a playlist of songs using a doubly linked list. Each song has a unique title. Sometimes, you want to remove a song by its title from the playlist.
🎯 Goal: Build a doubly linked list of songs, then delete a song by its title, and finally print the updated playlist.
📋 What You'll Learn
Create a doubly linked list with exactly these songs in order: "SongA", "SongB", "SongC", "SongD", "SongE"
Create a variable called deleteTitle and set it to the string "SongC"
Write a function called deleteByValue that deletes the first node with the value equal to deleteTitle
Print the playlist after deletion in the format: SongA <-> SongB <-> SongD <-> SongE <-> null
💡 Why This Matters
🌍 Real World
Doubly linked lists are used in music players, browsers, and other apps to move forward and backward through items efficiently.
💼 Career
Understanding how to manipulate linked lists is fundamental for software engineers working on data structures, memory management, and performance-critical applications.
Progress0 / 4 steps
1
Create the doubly linked list with songs
Create a doubly linked list with nodes containing these exact song titles in order: "SongA", "SongB", "SongC", "SongD", "SongE". Use the struct Node with fields value string, prev *Node, and next *Node. Create a variable head pointing to the first node.
DSA Go
Hint
Start by creating the first node head with value "SongA". Then create each next node, linking prev and next pointers accordingly.
2
Set the song title to delete
Create a variable called deleteTitle and set it to the string "SongC".
DSA Go
Hint
Just create a string variable named deleteTitle and assign it the value "SongC".
3
Write the deleteByValue function
Write a function called deleteByValue that takes head *Node and value string as parameters. It deletes the first node whose value equals the given value. Return the possibly new head of the list. Use this function inside main to delete the node with value deleteTitle.
DSA Go
Hint
Loop through the list to find the node with the matching value. Adjust the prev and next pointers of neighboring nodes to remove it. If the node is the head, update head.
4
Print the updated playlist
Print the playlist starting from head by traversing the list. Print each song's value followed by " <-> ". End with "null". The output should be exactly: SongA <-> SongB <-> SongD <-> SongE <-> null
DSA Go
Hint
Start from head and print each node's value followed by " <-> ". Stop when you reach the end and print "null".
Practice
(1/5)
1. What happens when you delete a node by value in a doubly linked list?
easy
A. The node with the matching value is removed and links are updated
B. All nodes are deleted regardless of value
C. Only the first node is deleted no matter the value
D. The list is reversed instead of deleting
Solution
Step 1: Locate the node with the given value
Traverse the doubly linked list from head to tail to find the node whose data matches the value to delete.
Step 2: Update the links to remove the node
Adjust the previous node's next pointer and the next node's previous pointer to bypass the node to be deleted, effectively removing it from the list.
Final Answer:
The node with the matching value is removed and links are updated -> Option A
Quick Check:
Delete by value means remove matching node and fix links [OK]
Hint: Find node by value, then fix previous and next links [OK]
Common Mistakes:
Not updating previous node's next pointer
Not updating next node's previous pointer
Deleting wrong node when multiple have same value
2. Which of the following Go code snippets correctly deletes a node by value from a doubly linked list?
easy
A. if current.data == value { current.next.next = current.prev.prev }
B. if current.data == value { current.next = current.prev; current.prev = current.next }
C. if current.data == value { current = nil }
D. if current.data == value { current.prev.next = current.next; current.next.prev = current.prev }
Solution
Step 1: Check node data against value
The condition current.data == value correctly identifies the node to delete.
Step 2: Update links correctly
Setting current.prev.next = current.next and current.next.prev = current.prev properly removes the node by linking its neighbors.
Final Answer:
if current.data == value { current.prev.next = current.next; current.next.prev = current.prev } -> Option D
Quick Check:
Correct link updates remove node [OK]
Hint: Update prev.next and next.prev to remove node [OK]
Common Mistakes:
Swapping prev and next pointers incorrectly
Setting current to nil without fixing links
Accessing next or prev without nil checks causing panic
3. Given the doubly linked list: 1 <-> 2 <-> 3 <-> 4 <-> 5, what is the list after deleting the node with value 3?
medium
A. 1 <-> 2 <-> 4 <-> 3 <-> 5
B. 1 <-> 2 <-> 4 <-> 5
C. 2 <-> 3 <-> 4 <-> 5
D. 1 <-> 2 <-> 3 <-> 5
Solution
Step 1: Identify node with value 3
Traverse the list to find the node containing 3, which is between nodes 2 and 4.
Step 2: Remove node 3 and update links
Set node 2's next pointer to node 4 and node 4's previous pointer to node 2, skipping node 3.
Final Answer:
1 <-> 2 <-> 4 <-> 5 -> Option B
Quick Check:
Node 3 removed, neighbors linked [OK]
Hint: Remove node and link neighbors directly [OK]
Common Mistakes:
Leaving node 3 linked causing broken list
Deleting wrong node by value
Not updating both prev and next pointers
4. Consider this Go code snippet to delete a node by value in a doubly linked list:
func deleteByValue(head *Node, value int) *Node {
current := head
for current != nil {
if current.data == value {
if current.prev != nil {
current.prev.next = current.next
} else {
head = current.next
}
if current.next != nil {
current.next.prev = current.prev
}
break
}
current = current.next
}
return head
}
What is the bug in this code?
medium
A. It does not handle deleting the last node correctly
B. It does not update head when deleting the first node
C. It breaks after deleting only the first matching node
D. It does not check for nil pointers before accessing prev or next
Solution
Step 1: Analyze loop and break behavior
The loop breaks immediately after deleting the first node with matching value, so only one node is deleted even if multiple nodes have the same value.
Step 2: Understand implications for multiple matches
If the list has multiple nodes with the same value, only the first is removed, which may not be the intended behavior if all matches should be deleted.
Final Answer:
It breaks after deleting only the first matching node -> Option C
Quick Check:
Break stops after first delete [OK]
Hint: Check if loop breaks too early when deleting multiple nodes [OK]
Common Mistakes:
Ignoring multiple nodes with same value
Not updating head when first node deleted
Not checking nil before pointer access
5. You have a doubly linked list with nodes: 10 <-> 20 <-> 30 <-> 20 <-> 40. You want to delete all nodes with value 20. Which approach correctly deletes all such nodes?
hard
A. Traverse the list and delete nodes with value 20, continuing without breaking the loop
B. Delete the first node with value 20 and then stop traversal
C. Delete nodes with value 20 only if they are at the head or tail
D. Replace nodes with value 20 with a new node containing 0
Solution
Step 1: Traverse entire list without breaking
To delete all nodes with value 20, you must check every node and not stop after the first deletion.
Step 2: Delete matching nodes and update links carefully
For each node with value 20, update the previous and next pointers to remove it, then continue traversal to find others.
Final Answer:
Traverse the list and delete nodes with value 20, continuing without breaking the loop -> Option A
Quick Check:
Delete all matches by full traversal [OK]
Hint: Do not break loop; delete all matching nodes during traversal [OK]
Common Mistakes:
Breaking loop after first deletion
Not updating links properly causing broken list
Only deleting head or tail nodes
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.