If node to be deleted is root, simply delete it. To delete a middle node, we must have a pointer to the node previous to the node to be deleted.
So if position is not zero, we run a loop position -1 times and get the pointer to the previous node.
# Node class
class Node:
# Function to initialize the node object
def __init__(self, data=None, next=None):
self.data = data # Assign data
self.next = next # Initialize next as null
# Linked List class
class LinkedList:
# Function to initialize the LinkedList object
def __init__(self):
self.head = None
# print function prints contents of linked list starting from head
def print(self):
# if linked list is empty
if self.head is None:
print("Linked list is empty")
return
itr = self.head
#taking empty string and appending values
llstr = ''
while itr:
llstr += str(itr.data)+' --> '
itr = itr.next
print(llstr)
# Function to insert a new node at the beginning
def insert_at_begining(self, data):
node = Node(data, self.head)
self.head = node
# Function to get length of linkedList
def get_length(self):
count = 0
itr = self.head
while itr:
count+=1
itr = itr.next
return count
#function to Remove an element at a given index
def remove_at(self, index):
#validate that index, if index is not a valid,raise the exception
if index<0 or index>=self.get_length():
raise Exception("Invalid Index")
#remove the element at the beginning of the linked list if index is equal to 0
if index==0:
self.head = self.head.next
return
count = 0
itr = self.head
while itr:
#find previous element of the node to be deleted
if count == index - 1:
itr.next = itr.next.next
break
itr = itr.next
count+=1
# Code execution starts here
if __name__ == '__main__':
ll = LinkedList()
ll.insert_at_begining("Red")
ll.insert_at_begining("Green")
ll.insert_at_begining("Black")
ll.insert_at_begining("Yellow")
print ("Created Linked List: ")
ll.print()
print ("Print Linked List after deletion at given position: ")
ll.remove_at(2)
ll.print()