# Define the Node class
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Define the Singly Linked List class
class SinglyLinkedList:
def __init__(self):
self.head = None
# Insert at end
def insert_at_end(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
temp = self.head
while temp.next:
temp = temp.next
temp.next = new_node
# Delete from end
def delete_from_end(self):
if not self.head:
print("List is empty. Nothing to delete.")
return
if not self.head.next:
print(f"Deleted node: {self.head.data}")
self.head = None
return
temp = self.head
while temp.next.next:
temp = temp.next
print(f"Deleted node: {temp.next.data}")
temp.next = None
# Display the list
def display(self):
if not self.head:
print("List is empty.")
return
temp = self.head
while temp:
print(temp.data, end=" -> ")
temp = temp.next
print("None")
# Example usage
ll = SinglyLinkedList()
ll.insert_at_end(10)
ll.insert_at_end(20)
ll.insert_at_end(30)
print("Current List:")
ll.display()
ll.delete_from_end()
print("After deletion:")
ll.display()
Sample Output:
Current List:
10 -> 20 -> 30 -> None
Deleted node: 30
After deletion:
10 -> 20 -> None