Bird
Raised Fist0
DSA Javaprogramming

Delete from Beginning of Doubly Linked List in DSA Java

Choose your learning style10 modes available
Mental Model
Removing the first item means moving the start pointer to the next item and fixing links so the list stays connected.
Analogy: Imagine a train where you remove the first carriage; the second carriage becomes the new front, and the connection to the removed carriage is cut.
null ← 1 ↔ 2 ↔ 3 -> null
↑head
Dry Run Walkthrough
Input: list: 1 ↔ 2 ↔ 3, delete from beginning
Goal: Remove the first node and update the list so it starts from the second node
Step 1: head moves from node 1 to node 2
null ← 1 ↔ 2 ↔ 3 -> null
     ↑head
Why: We want the list to start from the second node after deletion
Step 2: disconnect node 1's next pointer and node 2's previous pointer
null ← null ← 2 ↔ 3 -> null
↑head
Why: Cutting links removes node 1 from the list cleanly
Step 3: node 1 is now isolated and can be garbage collected
null ← 2 ↔ 3 -> null
↑head
Why: The list now starts at node 2 with proper links
Result:
null ← 2 ↔ 3 -> null
↑head
Annotated Code
DSA Java
class Node {
    int data;
    Node prev, next;
    Node(int data) {
        this.data = data;
        this.prev = null;
        this.next = null;
    }
}

class DoublyLinkedList {
    Node head;

    void insertEnd(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }
        Node curr = head;
        while (curr.next != null) {
            curr = curr.next;
        }
        curr.next = newNode;
        newNode.prev = curr;
    }

    void deleteFromBeginning() {
        if (head == null) return; // empty list
        head = head.next; // move head to next node
        if (head != null) {
            head.prev = null; // disconnect previous link
        }
    }

    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();
    }

    public static void main(String[] args) {
        DoublyLinkedList dll = new DoublyLinkedList();
        dll.insertEnd(1);
        dll.insertEnd(2);
        dll.insertEnd(3);
        dll.printList();
        dll.deleteFromBeginning();
        dll.printList();
    }
}
if (head == null) return; // empty list
handle empty list by returning early
head = head.next; // move head to next node
advance head pointer to second node to remove first
if (head != null) { head.prev = null; // disconnect previous link }
remove backward link from new head to old first node
OutputSuccess
1 ↔ 2 ↔ 3 2 ↔ 3
Complexity Analysis
Time: O(1) because we only update a few pointers at the start
Space: O(1) because no extra space is used besides variables
vs Alternative: Compared to deleting from the end which requires traversal O(n), deleting from beginning is faster and simpler
Edge Cases
empty list
no change, function returns immediately
DSA Java
if (head == null) return; // empty list
single element list
head becomes null, list becomes empty
DSA Java
head = head.next; // move head to next node
When to Use This Pattern
When you need to remove the first item quickly from a list, deleting from the beginning of a doubly linked list is the pattern to use because it updates pointers in constant time.
Common Mistakes
Mistake: Not setting the new head's prev pointer to null after deletion
Fix: Always set head.prev = null after moving head to next node
Mistake: Not handling empty list before deletion
Fix: Check if head is null and return early to avoid errors
Summary
Deletes the first node of a doubly linked list by moving the head pointer and fixing links.
Use when you want to remove the front item quickly from a doubly linked list.
The key is to move head forward and disconnect the backward link to the removed node.

Practice

(1/5)
1. What happens to the head pointer when you delete the first node from a doubly linked list?
easy
A. It moves to the second node in the list
B. It becomes null immediately
C. It points to the last node
D. It remains unchanged

Solution

  1. Step 1: Understand the head pointer role

    The head pointer always points to the first node in the doubly linked list.
  2. Step 2: Effect of deleting the first node

    When the first node is deleted, the head pointer must move to the next node, which becomes the new first node.
  3. Final Answer:

    It moves to the second node in the list -> Option A
  4. Quick Check:

    Deleting first node updates head to next node [OK]
Hint: Head always points to first node; update it after deletion [OK]
Common Mistakes:
  • Not updating head pointer after deletion
  • Setting head to null even if list has more nodes
  • Confusing head with tail pointer
2. Which of the following is the correct Java statement to update the prev pointer of the new head node after deleting the first node in a doubly linked list?
easy
A. head = null.prev;
B. head.next = null;
C. head.prev = null;
D. head.prev.next = null;

Solution

  1. Step 1: Identify the new head node

    After deleting the first node, the new head is the second node in the list.
  2. Step 2: Set the previous pointer of new head to null

    Since the new head is the first node now, its prev pointer must be null to indicate no node before it.
  3. Final Answer:

    head.prev = null; -> Option C
  4. Quick Check:

    New head prev pointer must be null [OK]
Hint: New head's prev pointer is always null [OK]
Common Mistakes:
  • Setting head.next to null instead of head.prev
  • Using invalid syntax like null.prev
  • Trying to access prev.next which may cause error
3. Consider the following Java code snippet for deleting the first node from a doubly linked list:
if (head == null) return;
head = head.next;
if (head != null) head.prev = null;

What will be the state of the list after deleting the first node from the list 1 <-> 2 <-> 3?
medium
A. 1 <-> 3
B. Empty list
C. 3 only
D. 2 <-> 3

Solution

  1. Step 1: Initial list and deletion

    The list is 1 <-> 2 <-> 3. Deleting the first node means removing node with value 1.
  2. Step 2: Update head and prev pointer

    Head moves to node 2. Then head.prev is set to null, so node 2 has no previous node.
  3. Final Answer:

    2 <-> 3 -> Option D
  4. Quick Check:

    First node removed, head points to second node [OK]
Hint: After deletion, head points to second node, prev set null [OK]
Common Mistakes:
  • Not setting head.prev to null causing broken links
  • Assuming node 1 still exists
  • Confusing next and prev pointers
4. The following code attempts to delete the first node from a doubly linked list but causes a runtime error:
if (head == null) return;
head = head.next;
head.prev = null;

What is the error and how to fix it?
medium
A. Syntax error due to missing semicolon; add semicolon after head.prev = null
B. NullPointerException when list has one node; fix by checking if head is null before setting head.prev
C. Logical error: head should not be updated; remove head = head.next
D. No error; code works fine

Solution

  1. Step 1: Identify cause of NullPointerException

    If the list has only one node, after head = head.next, head becomes null. Then head.prev causes NullPointerException.
  2. Step 2: Fix by checking head before accessing prev

    Add a condition to check if head is not null before setting head.prev = null.
  3. Final Answer:

    NullPointerException when list has one node; fix by checking if head is null before setting head.prev -> Option B
  4. Quick Check:

    Always check for null before accessing object members [OK]
Hint: Check head != null before head.prev = null to avoid errors [OK]
Common Mistakes:
  • Not checking for null causing runtime errors
  • Assuming list always has multiple nodes
  • Ignoring exception details
5. You have a doubly linked list with nodes 10 <-> 20 <-> 30 <-> 40. After deleting the first node twice using the correct deletion method, what will be the printed list?
hard
A. 30 <-> 40
B. 20 <-> 30 <-> 40
C. 40 only
D. Empty list

Solution

  1. Step 1: First deletion

    Deleting first node removes 10. Head moves to 20, head.prev set to null. List becomes 20 <-> 30 <-> 40.
  2. Step 2: Second deletion

    Deleting first node again removes 20. Head moves to 30, head.prev set to null. List becomes 30 <-> 40.
  3. Final Answer:

    30 <-> 40 -> Option A
  4. Quick Check:

    Two deletions remove first two nodes [OK]
Hint: Each deletion moves head forward and updates prev to null [OK]
Common Mistakes:
  • Deleting only once instead of twice
  • Not updating head.prev after second deletion
  • Printing old list without changes
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