def remove(self, data):
        """
        Removes a data node from the list. If the list contains more than one
        node having the same data that shall be removed, then the node having
        the first occurrency of the data is removed.

        :param data: the data to be removed in the new list node
        :type data: object

        """
        current_node = self._first_node
        deleted = False

        if self._size == 0:
            return

        if data == current_node.data():
            # case 1: the list has only one item
            if current_node.next() is None:
                self._first_node = LinkedListNode(None, None)
                self._last_node = self._first_node
                self._size = 0
                return
            # case 2: the list has more than one item
            current_node = current_node.next()
            self._first_node = current_node
            self._size -= 1
            return

        while True:
            if current_node is None:
                deleted = False
                break
            # Check next element's data
            next_node = current_node.next()
            if next_node is not None:
                if data == next_node.data():
                    next_next_node = next_node.next()
                    current_node.update_next(next_next_node)
                    next_node = None
                    deleted = True
                    break
            current_node = current_node.next()
        if deleted:
            self._size -= 1
Removes a data node from the list. If the list contains more than one
        node having the same data that shall be removed, then the node having
        the first occurrency of the data is removed.

        :param data: the data to be removed in the new list node
        :type data: object