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