code: def insert(self, val, position=0):
          
          if position <= 0:  # at beginning
              return self.insert_first(val)
  
          counter = 0
          last_node = self.head
          current_node = self.head
  
          while current_node is not None and counter <= position:
              if counter == position:
                  last_node.next_node = Node(val, current_node)
                  return True
  
              last_node = current_node
              current_node = current_node.next_node
              counter += 1
  
          if current_node is None:  # append to last element
              last_node.next_node = Node(val, None)
  
          return True
docs: Insert in position
  
          :param val: Object to insert
          :param position: Index of insertion
          :return: bool: True iff insertion completed successfully