📖 Scenario: You are managing a simple contact list where each contact is stored as a node in a singly linked list. Sometimes, you need to remove a contact by their name.
🎯 Goal: Build a singly linked list of contacts and write code to delete a node by its value (contact name).
📋 What You'll Learn
Create a singly linked list with exact contact names: 'Alice', 'Bob', 'Charlie', 'Diana', 'Eve'
Add a variable called nameToDelete with the value 'Charlie'
Write a function deleteNodeByValue that deletes the first node with the value matching nameToDelete
Print the linked list after deletion in the format: Alice -> Bob -> Diana -> Eve -> null
💡 Why This Matters
🌍 Real World
Linked lists are used in many applications like contact lists, music playlists, and undo functionality where items are added and removed dynamically.
💼 Career
Understanding linked list operations like deletion is fundamental for software development roles involving data structures, algorithms, and system design.
Progress0 / 4 steps
1
Create the Singly Linked List
Create a class called Node with properties value: string and next: Node | null. Then create nodes with values 'Alice', 'Bob', 'Charlie', 'Diana', and 'Eve' linked in that order. Finally, create a variable called head that points to the first node.
DSA Typescript
Hint
Define the Node class first, then link nodes by setting the next property.
2
Add the Name to Delete
Create a variable called nameToDelete and set it to the string 'Charlie'.
DSA Typescript
Hint
Just create a constant variable with the exact name and value.
3
Write the Delete Function
Write a function called deleteNodeByValue that takes head: Node | null and value: string as parameters. It should delete the first node with value from the linked list and return the new head. Use a variable called current to traverse and handle the case when the head node needs to be deleted.
DSA Typescript
Hint
Check if the head node has the value to delete. If yes, return head.next. Otherwise, traverse the list with current and update links to skip the node to delete.
4
Print the Linked List After Deletion
Call deleteNodeByValue with head and nameToDelete, store the result in newHead. Then print the linked list starting from newHead in the format: Alice -> Bob -> Diana -> Eve -> null. Use a variable called current to traverse and build the output string.
DSA Typescript
Hint
Traverse from newHead, add each node's value and ' -> ' to a string, then add 'null' at the end. Print the string.
Practice
(1/5)
1. What is the main purpose of the Delete Node by Value operation in a linked list?
easy
A. Reverse the linked list
B. Add a new node with the given value at the end
C. Remove the first node that contains the given value
D. Find the position of a node with the given value
Solution
Step 1: Understand the operation goal
The operation aims to remove a node that matches a specific value from the linked list.
Step 2: Identify the correct action
Removing the first node with the given value means deleting that node and linking its previous node to the next node.
Final Answer:
Remove the first node that contains the given value -> Option C
Quick Check:
Delete node by value = Remove first matching node [OK]
Hint: Delete node by value means remove first matching node [OK]
Common Mistakes:
Confusing deletion with insertion
Trying to delete all nodes with the value instead of first
Thinking it finds position only
Assuming it reverses the list
2. Which of the following TypeScript code snippets correctly deletes the head node if its value is 5 from a singly linked list starting at head?
easy
A. if (head.value === 5) head = head.next;
B. head = head.next.value === 5 ? head.next.next : head;
C. while (head.value !== 5) head = head.next;
D. head.next = null;
Solution
Step 1: Check if head node has value 5
If the first node's value is 5, we remove it by moving head to the next node.
Step 2: Verify code correctness
if (head.value === 5) head = head.next; correctly updates head to head.next if head.value is 5, effectively deleting the first node.
Final Answer:
if (head.value === 5) head = head.next; -> Option A
Quick Check:
Delete head node by reassigning head [OK]
Hint: Check head value first, then update head pointer [OK]
Common Mistakes:
Using incorrect conditional expressions
Assigning head.next incorrectly
Not handling head node deletion
Overwriting head without checks
3. Given the linked list: 1 -> 3 -> 5 -> 7 -> null, what is the list after deleting the node with value 5 using the following TypeScript code?
let current = head;
while (current.next !== null) {
if (current.next.value === 5) {
current.next = current.next.next;
break;
}
current = current.next;
}
medium
A. 1 -> 3 -> 5 -> 7 -> null
B. 1 -> 3 -> 7 -> null
C. 3 -> 5 -> 7 -> null
D. 1 -> 7 -> null
Solution
Step 1: Traverse list to find node before value 5
Loop checks nodes until current.next.value is 5, which is true when current is node with value 3.
Step 2: Delete node with value 5 by skipping it
Set current.next to current.next.next, linking node 3 directly to node 7, removing node 5.
Final Answer:
1 -> 3 -> 7 -> null -> Option B
Quick Check:
Skip node with value 5 = 1->3->7 [OK]
Hint: Skip node by linking previous to next [OK]
Common Mistakes:
Not breaking loop after deletion
Deleting wrong node
Not updating pointers correctly
Confusing current and current.next
4. Consider this buggy TypeScript code to delete a node by value from a singly linked list:
function deleteNode(head: Node | null, value: number): Node | null {
let current = head;
while (current !== null) {
if (current.next?.value === value) {
current.next = current.next.next;
}
current = current.next!;
}
return head;
}
What is the main problem with this code?
medium
A. It may cause a runtime error when current.next is null
B. It deletes all nodes with the value instead of the first
C. It does not handle deletion if head node has the value
D. It reverses the linked list accidentally
Solution
Step 1: Analyze the loop termination
The while (current !== null) continues to the last node where current.next is null. The if uses ?. safely, but then executes current = current.next!;, and ! non-null assertion on null causes runtime error.
Step 2: Confirm the bug triggers always
For any non-empty list, it crashes at the last node regardless of value, preventing correct execution.
Final Answer:
It may cause a runtime error when current.next is null -> Option A
Quick Check:
current.next! on null = runtime error [OK]
Hint: Beware of non-null assertion ! on potentially null next [OK]
Common Mistakes:
Using non-null assertion (!) on potentially null next
Assuming current.next always exists
Not breaking after deletion
Confusing current and current.next updates
5. You have a singly linked list: 2 -> 4 -> 6 -> 4 -> 8 -> null. You want to delete the first node with value 4. After deletion, you want to insert a new node with value 10 right after the deleted node's position. Which sequence of operations correctly achieves this?
hard
A. Delete first 4, then insert 10 after node 6
B. Insert 10 at head, then delete first 4
C. Delete all 4s, then insert 10 at end
D. Delete first 4, then insert 10 after node 2
Solution
Step 1: Delete first node with value 4
The first 4 is the second node, so remove it by linking node 2 to node 6.
Step 2: Insert new node with value 10 after node 2
Create new node 10 and link it after node 2, then link new node to node 6.
Final Answer:
Delete first 4, then insert 10 after node 2 -> Option D
Quick Check:
Delete 4, insert 10 after previous node [OK]
Hint: Delete node, then insert new node at same position [OK]
Common Mistakes:
Inserting new node at wrong position
Deleting all nodes with value 4
Not updating links correctly
Inserting before deletion
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.