Bird
Raised Fist0
DSA C#programming~10 mins

Delete Node at End in DSA C# - Execution Trace

Choose your learning style10 modes available
Concept Flow - Delete Node at End
Start at head
↓
Is list empty?
↓
Stop
↓
Find second last node
↓
Set second last node's next to null
↓
Delete last node
↓
Stop
Start from the head, check if list is empty. If not, move to the last node by traversing. Then remove the last node by updating the second last node's next pointer to null.
Execution Sample
DSA C#
Node DeleteAtEnd(Node head) {
  if (head == null) return null;
  if (head.next == null) return null;
  Node current = head;
  while (current.next.next != null) {
    current = current.next;
  }
  current.next = null;
  return head;
}
Deletes the last node from a singly linked list and returns the updated head.
Execution Table
StepActionCurrent Node ValueConditionResulting List
1Check if head is nullN/Ahead == null? False1 -> 2 -> 3 -> 4 -> null
2Check if head.next is nullN/Ahead.next == null? False1 -> 2 -> 3 -> 4 -> null
3Initialize current = head1N/A1 -> 2 -> 3 -> 4 -> null
4Check current.next.next != null12.next != null? True1 -> 2 -> 3 -> 4 -> null
5Move current to current.next2N/A1 -> 2 -> 3 -> 4 -> null
6Check current.next.next != null23.next != null? True1 -> 2 -> 3 -> 4 -> null
7Move current to current.next3N/A1 -> 2 -> 3 -> 4 -> null
8Check current.next.next != null34.next != null? False1 -> 2 -> 3 -> 4 -> null
9Set current.next = null (delete last node)3N/A1 -> 2 -> 3 -> null
10Return head1N/A1 -> 2 -> 3 -> null
💡 Loop ends when current.next.next is null, meaning current is second last node.
Variable Tracker
VariableStartAfter Step 3After Step 5After Step 7After Step 9Final
head1 -> 2 -> 3 -> 4 -> null1 -> 2 -> 3 -> 4 -> null1 -> 2 -> 3 -> 4 -> null1 -> 2 -> 3 -> 4 -> null1 -> 2 -> 3 -> null1 -> 2 -> 3 -> null
currentnull12333
Key Moments - 2 Insights
Why do we check current.next.next != null instead of current.next != null in the loop?
We check current.next.next != null to stop at the second last node, so we can remove the last node by setting current.next to null. This is shown in steps 4, 6, and 8 in the execution_table.
What happens if the list has only one node?
If the list has only one node, head.next is null, so we return null to indicate the list becomes empty after deletion. This is checked in step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'current' after step 5?
ANode with value 3
BNode with value 2
CNode with value 1
DNode with value 4
💡 Hint
Check the 'Current Node Value' column at step 5 in execution_table.
At which step does the last node get deleted?
AStep 9
BStep 8
CStep 10
DStep 7
💡 Hint
Look for the action 'Set current.next = null' in execution_table.
If the list had only one node, what would the function return?
AThe same single node
BThe head node's next node
CNull (empty list)
DAn error
💡 Hint
Refer to step 2 where head.next == null is checked.
Concept Snapshot
Delete Node at End in singly linked list:
- If list empty, return null
- If only one node, return null
- Traverse to second last node
- Set second last node's next to null
- Return head
This removes the last node safely.
Full Transcript
This visual trace shows how to delete the last node from a singly linked list. We start by checking if the list is empty or has only one node. If so, we return null because the list becomes empty after deletion. Otherwise, we traverse the list to find the second last node by checking current.next.next != null. Once found, we set current.next to null, removing the last node. Finally, we return the head of the updated list. The execution table tracks each step, showing variable values and list state. Key moments clarify why we check current.next.next and what happens with single-node lists. The quiz tests understanding of these steps.

Practice

(1/5)
1. What does the operation Delete Node at End do in a singly linked list?
easy
A. Adds a new node at the end of the list
B. Removes the first node from the list
C. Removes the last node from the list
D. Adds a new node at the beginning of the list

Solution

  1. Step 1: Understand the operation meaning

    Deleting a node at the end means removing the last node in the linked list.
  2. Step 2: Compare options with operation

    Only Removes the last node from the list matches removing the last node; others add or remove nodes elsewhere.
  3. Final Answer:

    Removes the last node from the list -> Option C
  4. Quick Check:

    Delete Node at End = Remove last node [OK]
Hint: Deleting at end means removing the last node [OK]
Common Mistakes:
  • Confusing delete at end with delete at beginning
  • Thinking it adds a node instead of removing
  • Assuming it deletes a middle node
2. Which of the following is the correct syntax to delete the last node in a singly linked list in C#?
easy
A. Create a new node and assign it to last node
B. Set head to null directly
C. Set last node's next to head
D. Traverse to second last node, set its next to null

Solution

  1. Step 1: Identify correct deletion method

    To delete last node, we must reach second last node and set its next pointer to null.
  2. Step 2: Check options for this logic

    Traverse to second last node, set its next to null matches this logic; others do unrelated actions.
  3. Final Answer:

    Traverse to second last node, set its next to null -> Option D
  4. Quick Check:

    Delete last node = second last node next = null [OK]
Hint: Set second last node's next to null to delete last [OK]
Common Mistakes:
  • Setting head to null deletes whole list
  • Trying to set last node's next to head causes cycle
  • Creating new node does not delete existing node
3. Given the linked list: 10 -> 20 -> 30 -> 40 -> null, what will be the list after deleting the node at the end?
medium
A. 10 -> 20 -> 30 -> 40 -> null
B. 10 -> 20 -> 30 -> null
C. 20 -> 30 -> 40 -> null
D. 10 -> 20 -> null

Solution

  1. Step 1: Identify last node in list

    The last node is 40 in the list 10 -> 20 -> 30 -> 40 -> null.
  2. Step 2: Remove last node and update list

    Deleting last node removes 40, so list becomes 10 -> 20 -> 30 -> null.
  3. Final Answer:

    10 -> 20 -> 30 -> null -> Option B
  4. Quick Check:

    Last node 40 removed = 10->20->30->null [OK]
Hint: Remove last value to get new list [OK]
Common Mistakes:
  • Not removing last node, list unchanged
  • Removing first node instead
  • Removing more than one node accidentally
4. Consider this code snippet to delete the last node of a singly linked list:
Node current = head;
while(current.next.next != null) {
    current = current.next;
}
current.next = null;
What error can occur when this code runs on a list with only one node?
medium
A. NullReferenceException because current.next.next is invalid
B. No error, code works fine
C. Infinite loop because condition never false
D. Deletes the head node incorrectly

Solution

  1. Step 1: Analyze condition for single node list

    If list has one node, current.next is null, so current.next.next causes error.
  2. Step 2: Identify exception type

    Accessing next of null causes NullReferenceException in C#.
  3. Final Answer:

    NullReferenceException because current.next.next is invalid -> Option A
  4. Quick Check:

    Single node list causes null.next access error [OK]
Hint: Check for null before accessing next.next [OK]
Common Mistakes:
  • Ignoring null check for single node
  • Assuming loop runs safely always
  • Thinking it deletes head node
5. You have a singly linked list with nodes: 5 -> 15 -> 25 -> 35 -> 45 -> null. Write a method to delete the last node and return the updated list. Which of the following code snippets correctly implements this?
hard
A. if (head == null) return null; if (head.next == null) return null; Node current = head; while (current.next.next != null) { current = current.next; } current.next = null; return head;
B. if (head == null) return null; Node current = head; while (current.next != null) { current = current.next; } current = null; return head;
C. if (head == null) return null; Node current = head; while (current.next.next != null) { current = current.next; } current.next = current; return head;
D. if (head == null) return null; head = head.next; return head;

Solution

  1. Step 1: Handle empty and single node cases

    If list is empty or has one node, deleting last node returns null (empty list).
  2. Step 2: Traverse to second last node and delete last

    Loop until current.next.next is null, then set current.next to null to remove last node.
  3. Step 3: Return updated head

    Return head pointer to updated list.
  4. Final Answer:

    Code snippet D correctly deletes last node and returns updated list -> Option A
  5. Quick Check:

    Check null, traverse to second last, set next null [OK]
Hint: Check list size, then remove last by second last next = null [OK]
Common Mistakes:
  • Setting current to null does not remove last node
  • Assigning current.next to current creates cycle
  • Deleting head instead of last node
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