Insert in position

        :param val: Object to insert
        :param position: Index of insertion
        :return: bool: True iff insertion completed successfully

def insert(self, val, position=0):
        """Insert in position

        :param val: Object to insert
        :param position: Index of insertion
        :return: bool: True iff insertion completed successfully
        """
        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