Bird
Raised Fist0
DSA Javaprogramming

Delete Node at End in DSA Java

Choose your learning style10 modes available
Mental Model
To remove the last item from a chain, find the second last item and cut off its link to the last one.
Analogy: Imagine a line of people holding hands. To remove the last person, the second last person lets go of their hand, so the last person is no longer connected.
head -> 1 -> 2 -> 3 -> null
Dry Run Walkthrough
Input: list: 1 -> 2 -> 3 -> null, delete node at end
Goal: Remove the last node (3) so the list ends at node 2
Step 1: start at head node (1)
head -> [1] -> 2 -> 3 -> null
Why: We begin from the start to find the node before the last
Step 2: move to next node (2)
head -> 1 -> [2] -> 3 -> null
Why: Keep moving forward until we reach the second last node
Step 3: check next node's next pointer (3's next is null)
head -> 1 -> [2] -> 3 -> null
Why: When next node's next is null, current node is second last
Step 4: set current node's next to null, removing last node
head -> 1 -> 2 -> null
Why: Cutting the link removes the last node from the list
Result:
head -> 1 -> 2 -> null
Annotated Code
DSA Java
public class LinkedList {
    static class Node {
        int data;
        Node next;
        Node(int data) {
            this.data = data;
            this.next = null;
        }
    }

    Node head;

    // Delete node at end
    public void deleteAtEnd() {
        if (head == null) return; // empty list
        if (head.next == null) { // single node
            head = null;
            return;
        }
        Node curr = head;
        // move until second last node
        while (curr.next.next != null) {
            curr = curr.next;
        }
        curr.next = null; // remove last node
    }

    // Print list
    public void printList() {
        Node curr = head;
        while (curr != null) {
            System.out.print(curr.data);
            if (curr.next != null) System.out.print(" -> ");
            curr = curr.next;
        }
        System.out.println(" -> null");
    }

    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();
    }
}
if (head == null) return; // empty list
handle empty list by returning immediately
if (head.next == null) { head = null; return; }
handle single node list by setting head to null
while (curr.next.next != null) { curr = curr.next; }
advance curr to second last node by checking next's next
curr.next = null; // remove last node
cut off last node by setting second last's next to null
OutputSuccess
1 -> 2 -> null
Complexity Analysis
Time: O(n) because we traverse the list once to find the second last node
Space: O(1) because we use only a few pointers regardless of list size
vs Alternative: Compared to removing from the front which is O(1), deleting at end requires traversal making it O(n)
Edge Cases
empty list
function returns immediately without error
DSA Java
if (head == null) return; // empty list
single node list
head is set to null, list becomes empty
DSA Java
if (head.next == null) { head = null; return; }
When to Use This Pattern
When you need to remove the last item from a linked list, look for the pattern of finding the second last node to cut its link.
Common Mistakes
Mistake: Trying to delete last node by moving until curr.next is null (which points to last node) and then setting curr to null
Fix: Instead, move until curr.next.next is null to get second last node, then set curr.next to null
Summary
Deletes the last node from a singly linked list by cutting the link from the second last node.
Use when you want to remove the last element from a linked list.
The key is to stop at the second last node and set its next pointer to null.

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