Bird
Raised Fist0
DSA Javaprogramming~10 mins

Delete Node at End in DSA Java - Execution Trace

Choose your learning style10 modes available
Concept Flow - Delete Node at End
Start at head
↓
Check if list empty?
Yes→Nothing to delete, EXIT
No↓
Check if only one node?
Yes→Delete head, set head=null
No↓
Traverse to second last node
↓
Set second last node's next=null
↓
Node at end deleted
↓
EXIT
Start from the head, check if list is empty or has one node, otherwise traverse to second last node and remove the last node by setting next to null.
Execution Sample
DSA Java
class Node {
  int data;
  Node next;
}

// Delete node at end
void deleteEnd() {
  if (head == null) return;
  if (head.next == null) head = null;
  else {
    Node temp = head;
    while (temp.next.next != null) temp = temp.next;
    temp.next = null;
  }
}
Deletes the last node of a singly linked list by adjusting pointers.
Execution Table
StepActionCondition/CheckPointer MovementList State
1Check if head is nullhead == null? falseNo movement1 -> 2 -> 3 -> null
2Check if only one nodehead.next == null? falseNo movement1 -> 2 -> 3 -> null
3Initialize temp = head-temp points to node 11 -> 2 -> 3 -> null
4Check temp.next.next != null2.next != null? truetemp moves to node 21 -> 2 -> 3 -> null
5Check temp.next.next != null3.next != null? falseStop traversal1 -> 2 -> 3 -> null
6Set temp.next = nullDelete node 3-1 -> 2 -> null
7End--1 -> 2 -> null
💡 Traversal stops when temp.next.next is null, meaning temp is second last node; last node deleted by setting temp.next to null.
Variable Tracker
VariableStartAfter Step 3After Step 4After Step 5Final
headNode(1)Node(1)Node(1)Node(1)Node(1)
tempnullNode(1)Node(2)Node(2)Node(2)
Key Moments - 2 Insights
Why do we check temp.next.next != null instead of temp.next != null?
Because we want temp to stop at the second last node, so we check if the node after temp.next exists. This is shown in execution_table rows 4 and 5 where traversal stops when temp.next.next is null.
What happens if the list has only one node?
In that case, head.next is null, so we set head to null directly (step 2). This deletes the only node and makes the list empty.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of temp after step 4?
ANode with data 3
BNode with data 2
CNode with data 1
Dnull
💡 Hint
Check the 'Pointer Movement' column at step 4 in execution_table.
At which step does the last node get deleted?
AStep 6
BStep 5
CStep 3
DStep 2
💡 Hint
Look at the 'Action' and 'List State' columns in execution_table for when temp.next is set to null.
If the list had only one node, which step would delete it?
AStep 1
BStep 4
CStep 2
DStep 6
💡 Hint
Refer to the condition checking head.next == null in execution_table step 2.
Concept Snapshot
Delete Node at End in singly linked list:
- If list empty, do nothing.
- If one node, set head=null.
- Else, traverse to second last node.
- Set second last node's next to null.
- Last node removed, list shortened by one.
Full Transcript
This concept shows how to delete the last node in a singly linked list. We start by checking if the list is empty or has only one node. If empty, we do nothing. If one node, we delete it by setting head to null. Otherwise, we move a pointer to the second last node by checking temp.next.next until it is null. Then we set temp.next to null, removing the last node. The execution table traces each step, showing pointer movements and list state changes. Key moments clarify why we check temp.next.next and how single-node lists are handled. The visual quiz tests understanding of pointer positions and deletion steps. This method safely removes the last node and updates the list correctly.

Practice

(1/5)
1. What does the operation Delete Node at End do in a singly linked list?
easy
A. Removes the last node from the list
B. Removes the first node from the list
C. Adds a new node at the end of 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: Identify the correct description

    Removing the last node matches Removes the last node from the list, while others describe adding or removing nodes at different positions.
  3. Final Answer:

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

    Delete Node at End = Removes last node [OK]
Hint: Deleting at end always removes the last node [OK]
Common Mistakes:
  • Confusing delete at end with delete at beginning
  • Thinking it adds a node instead of removing
  • Mixing up first and last node operations
2. Which of the following is the correct Java syntax to delete the last node in a singly linked list named list assuming you have a method deleteAtEnd()?
easy
A. list.deleteAtEnd();
B. deleteAtEnd.list();
C. list.deleteAtEnd;
D. list.deleteAtEnd[];

Solution

  1. Step 1: Identify method call syntax in Java

    Calling a method on an object uses dot notation with parentheses: object.methodName();
  2. Step 2: Match correct syntax

    list.deleteAtEnd(); uses correct syntax: list.deleteAtEnd(); others have syntax errors or wrong usage.
  3. Final Answer:

    list.deleteAtEnd(); -> Option A
  4. Quick Check:

    Method call syntax = object.method() [OK]
Hint: Method calls need parentheses after name [OK]
Common Mistakes:
  • Omitting parentheses when calling methods
  • Using brackets [] instead of parentheses ()
  • Reversing object and method names
3. Consider the following Java code for a singly linked list:
class Node {
  int data;
  Node next;
  Node(int d) { data = d; next = null; }
}

class LinkedList {
  Node head;

  void deleteAtEnd() {
    if (head == null) return;
    if (head.next == null) {
      head = null;
      return;
    }
    Node temp = head;
    while (temp.next.next != null) {
      temp = temp.next;
    }
    temp.next = null;
  }

  void printList() {
    Node temp = head;
    while (temp != null) {
      System.out.print(temp.data + " -> ");
      temp = temp.next;
    }
    System.out.println("null");
  }
}

public class Main {
  public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.head = new Node(1);
    list.head.next = new Node(2);
    list.head.next.next = new Node(3);
    list.deleteAtEnd();
    list.printList();
  }
}
What is the output after running this code?
medium
A. 1 -> 2 -> 3 -> null
B. 1 -> 2 -> null
C. 2 -> 3 -> null
D. null

Solution

  1. Step 1: Understand initial list and deleteAtEnd()

    The list starts as 1 -> 2 -> 3 -> null. The deleteAtEnd() removes the last node (3).
  2. Step 2: Trace deleteAtEnd() method

    It traverses to node with data 2, sets its next to null, removing node 3.
  3. Final Answer:

    1 -> 2 -> null -> Option B
  4. Quick Check:

    Last node removed, list ends at 2 [OK]
Hint: Deleting end removes last node, list shortens by one [OK]
Common Mistakes:
  • Forgetting to update the second last node's next to null
  • Assuming head changes when list has multiple nodes
  • Printing old list without deletion
4. The following Java method is intended to delete the last node of a singly linked list. What is the error?
void deleteAtEnd() {
  if (head == null) return;
  Node temp = head;
  while (temp.next != null) {
    temp = temp.next;
  }
  temp = null;
}
medium
A. It causes a NullPointerException
B. It does not handle empty list
C. It deletes the head node incorrectly
D. It does not update the second last node's next pointer

Solution

  1. Step 1: Analyze the loop and pointer updates

    The loop moves temp to the last node (where temp.next is null). Setting temp = null only changes local pointer, not list links.
  2. Step 2: Identify missing update to second last node

    The second last node's next pointer is not set to null, so the last node remains linked.
  3. Final Answer:

    It does not update the second last node's next pointer -> Option D
  4. Quick Check:

    Must update second last node's next to null [OK]
Hint: Set second last node's next to null, not just temp = null [OK]
Common Mistakes:
  • Setting temp = null only changes local variable
  • Not handling single-node list case
  • Ignoring list head update if only one node
5. You have a singly linked list with nodes containing values: 10 -> 20 -> 30 -> 40 -> null. You want to delete the last node and then add a new node with value 50 at the end. Which sequence of operations correctly achieves this?
hard
A. Call addAtEnd(50) only
B. Call addAtEnd(50), then call deleteAtEnd()
C. Call deleteAtEnd(), then call addAtEnd(50)
D. Call deleteAtEnd() twice, then addAtEnd(50)

Solution

  1. Step 1: Delete the last node

    Calling deleteAtEnd() removes node with value 40, list becomes 10 -> 20 -> 30 -> null.
  2. Step 2: Add new node with value 50 at end

    Calling addAtEnd(50) appends node 50, list becomes 10 -> 20 -> 30 -> 50 -> null.
  3. Final Answer:

    Call deleteAtEnd(), then call addAtEnd(50) -> Option C
  4. Quick Check:

    Delete last, then add new node [OK]
Hint: Delete old last node before adding new one [OK]
Common Mistakes:
  • Adding new node before deleting old last node
  • Deleting twice unnecessarily
  • Not deleting at all before adding
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