You are on page 1of 4

Assignment-4

CSO-441 DATA STRUCTURES AND ALGORITHMS

Date- 03/03/2024

Name- Samikshya panda

Roll- 22CE8071

Department- Civil Engineering

Write a python program to implement a singly linked list with following


functionalities: All type deletion from singly link list

class Node:
def __init__(self, data):
self.data = data
self.next = None

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

def append(self, data):


new_node = Node(data)
if not self.head:
self.head = new_node
return
last_node = self.head
while last_node.next:
last_node = last_node.next
last_node.next = new_node

def print_list(self):
cur_node = self.head
while cur_node:
print(cur_node.data, end=" -> ")
cur_node = cur_node.next
print("None")

def delete_node_by_value(self, key):


cur_node = self.head
if cur_node and cur_node.data == key:
self.head = cur_node.next
cur_node = None
return

prev = None
while cur_node and cur_node.data != key:
prev = cur_node
cur_node = cur_node.next
if cur_node is None:
return
prev.next = cur_node.next
cur_node = None

def delete_node_by_position(self, position):


if self.head is None:
return
temp_node = self.head
if position == 0:
self.head = temp_node.next
temp_node = None
return
for i in range(position - 1):
temp_node = temp_node.next
if temp_node is None:
break
if temp_node is None or temp_node.next is None:
return
next = temp_node.next.next
temp_node.next = None
temp_node.next = next

def delete_head(self):
if self.head is None:
return
self.head = self.head.next

def delete_last_node(self):
if self.head is None:
return
if self.head.next is None:
self.head = None
return
temp = self.head
while temp.next.next:
temp = temp.next
temp.next = None

def delete_list(self):
self.head = None

#Example
if __name__ == "__main__":
llist = LinkedList()
for i in range(1, 6): # Create a list of 1-5
llist.append(i)
print("Original List:")
llist.print_list()

llist.delete_node_by_value(3)
print("\nAfter deleting node by value (3):")
llist.print_list()

llist.delete_node_by_position(2)
print("\nAfter deleting node by position (2):")
llist.print_list()

llist.delete_head()
print("\nAfter deleting head node:")
llist.print_list()

llist.delete_last_node()
print("\nAfter deleting last node:")
llist.print_list()

llist.delete_list()
print("\nAfter deleting the entire list:")
llist.print_list()

You might also like