Bird
Raised Fist0
DSA Typescriptprogramming~10 mins

Delete Node by Value in DSA Typescript - Execution Trace

Choose your learning style10 modes available
Concept Flow - Delete Node by Value
Start at head
↓
Check if head is null?
Yes→List empty, stop
No↓
Check if head value == target?
Yes→Delete head, update head
No↓
Traverse list with prev and current
↓
Check current value == target?
Yes→Delete current node
No↓
Move prev and current forward
Back to Traverse↓
End of list reached, target not found
↓
Stop
↩Back to Traverse
Start from the head, check if the node to delete is the head, else traverse the list to find and delete the node with the target value.
Execution Sample
DSA Typescript
function deleteNode(head: ListNode | null, val: number): ListNode | null {
  if (!head) return null;
  if (head.val === val) return head.next;
  let prev = head;
  let curr = head.next;
  while (curr) {
    if (curr.val === val) { prev.next = curr.next; break; }
    prev = curr;
    curr = curr.next;
  }
  return head;
}
Deletes the first node with the given value from a singly linked list.
Execution Table
Stepprev.valcurr.valConditionActionList State
112head.val === val? (1 === 3)No, move to traversal1 -> 2 -> 3 -> 4 -> null
212curr.val === val? (2 === 3)No, move forward1 -> 2 -> 3 -> 4 -> null
323curr.val === val? (3 === 3)Yes, delete curr1 -> 2 -> 4 -> null
424Loop ends after deletionStop traversal1 -> 2 -> 4 -> null
💡 Node with value 3 found and deleted, traversal stops.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
prev1 (head)1222
curr22344
head11111
Key Moments - 3 Insights
Why do we check if the head node has the target value before traversal?
Because if the head node itself has the target value, we delete it by returning head.next immediately, as shown in execution_table step 1.
What happens if the target value is not found in the list?
The traversal continues until curr becomes null, then the function returns the original head without changes, as no deletion occurs.
Why do we update prev.next to curr.next when deleting a node?
To remove the current node from the list by linking the previous node directly to the node after current, effectively skipping the deleted node (execution_table step 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'curr.val' at Step 3?
A3
B2
C4
D1
💡 Hint
Check the 'curr.val' column in execution_table row for Step 3.
At which step does the node get deleted?
AStep 2
BStep 3
CStep 4
DStep 1
💡 Hint
Look at the 'Action' column in execution_table to find when deletion happens.
If the target value was 1 instead of 3, what would happen at Step 1?
ADelete head and return head.next
BStart traversal with prev=head and curr=head.next
CNo deletion, continue traversal
DDelete last node
💡 Hint
Refer to the condition check for head.val === val in execution_table Step 1.
Concept Snapshot
Delete Node by Value in Linked List:
- Check if head is null, return null if yes.
- If head value matches target, delete head by returning head.next.
- Else, traverse with prev and curr pointers.
- When curr.val matches target, delete by prev.next = curr.next.
- Return head after deletion or if not found.
Full Transcript
This visual execution traces deleting a node by value in a singly linked list. We start by checking if the list is empty or if the head node contains the target value. If the head matches, we delete it by returning the next node as the new head. Otherwise, we traverse the list using two pointers: prev and curr. We move forward until we find the node with the target value. When found, we delete it by linking prev.next to curr.next, skipping the current node. The traversal stops after deletion or when the list ends without finding the target. The final list state reflects the deletion or remains unchanged if the target was not found.

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

  1. Step 1: Understand the operation goal

    The operation aims to remove a node that matches a specific value from the linked list.
  2. 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.
  3. Final Answer:

    Remove the first node that contains the given value -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    if (head.value === 5) head = head.next; -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    1 -> 3 -> 7 -> null -> Option B
  4. 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

  1. 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.
  2. Step 2: Confirm the bug triggers always

    For any non-empty list, it crashes at the last node regardless of value, preventing correct execution.
  3. Final Answer:

    It may cause a runtime error when current.next is null -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    Delete first 4, then insert 10 after node 2 -> Option D
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard