0
0
DSA Pythonprogramming~20 mins

Delete from End of Doubly Linked List in DSA Python - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Doubly Linked List Deletion Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output after deleting last node from doubly linked list
What is the printed state of the doubly linked list after deleting the last node?
DSA Python
class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node
        new_node.prev = last

    def delete_from_end(self):
        if not self.head:
            return
        if not self.head.next:
            self.head = None
            return
        last = self.head
        while last.next:
            last = last.next
        last.prev.next = None

    def print_list(self):
        if not self.head:
            print("null")
            return
        current = self.head
        result = []
        while current:
            result.append(str(current.data))
            current = current.next
        print(" -> ".join(result) + " -> null")

# Setup
dll = DoublyLinkedList()
dll.append(10)
dll.append(20)
dll.append(30)
dll.delete_from_end()
dll.print_list()
A20 -> 30 -> null
B10 -> 20 -> 30 -> null
C10 -> 20 -> null
D10 -> null
Attempts:
2 left
💡 Hint
Think about what happens to the last node and the previous node's next pointer.
Predict Output
intermediate
2:00remaining
Output after deleting last node from single-node doubly linked list
What is the printed state of the doubly linked list after deleting the last node when the list has only one node?
DSA Python
class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node
        new_node.prev = last

    def delete_from_end(self):
        if not self.head:
            return
        if not self.head.next:
            self.head = None
            return
        last = self.head
        while last.next:
            last = last.next
        last.prev.next = None

    def print_list(self):
        if not self.head:
            print("null")
            return
        current = self.head
        result = []
        while current:
            result.append(str(current.data))
            current = current.next
        print(" -> ".join(result) + " -> null")

# Setup
single_node_list = DoublyLinkedList()
single_node_list.append(100)
single_node_list.delete_from_end()
single_node_list.print_list()
Anull
B100 -> null
CError
D100
Attempts:
2 left
💡 Hint
Deleting the only node should leave the list empty.
🔧 Debug
advanced
2:00remaining
Identify the error in delete_from_end method
Which option contains the error that will cause a broken list when deleting the last node from a doubly linked list with two nodes?
DSA Python
def delete_from_end(self):
    if not self.head:
        return
    if not self.head.next:
        self.head = None
        return
    last = self.head
    while last.next:
        last = last.next
    last.prev = None  # Error here
Alast.prev = None # Incorrect, breaks list
Blast.prev.next = None # Correctly removes last node
Clast.next = None # Correctly removes last node
Dself.head = None # Incorrect, deletes entire list
Attempts:
2 left
💡 Hint
Think about which pointer needs to be updated to remove the last node properly.
🧠 Conceptual
advanced
2:00remaining
Effect of deleting last node on doubly linked list pointers
After deleting the last node from a doubly linked list, which pointers are updated to maintain list integrity?
AThe previous node's prev pointer is set to None.
BThe head pointer is set to None regardless of list size.
CThe last node's next pointer is set to the head node.
DThe previous node's next pointer is set to None; the last node is removed.
Attempts:
2 left
💡 Hint
Consider what happens to the node before the last node after deletion.
Predict Output
expert
3:00remaining
Output after multiple deletions from end of doubly linked list
What is the printed state of the doubly linked list after deleting the last node three times in a row?
DSA Python
class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node
        new_node.prev = last

    def delete_from_end(self):
        if not self.head:
            return
        if not self.head.next:
            self.head = None
            return
        last = self.head
        while last.next:
            last = last.next
        last.prev.next = None

    def print_list(self):
        if not self.head:
            print("null")
            return
        current = self.head
        result = []
        while current:
            result.append(str(current.data))
            current = current.next
        print(" -> ".join(result) + " -> null")

# Setup
dll = DoublyLinkedList()
dll.append(1)
dll.append(2)
dll.append(3)
dll.append(4)
dll.append(5)
dll.delete_from_end()
dll.delete_from_end()
dll.delete_from_end()
dll.print_list()
A3 -> 4 -> 5 -> null
B1 -> 2 -> null
C1 -> 2 -> 3 -> null
Dnull
Attempts:
2 left
💡 Hint
Each deletion removes the last node; track the list after each removal.