code: def remove(self, data):
          
          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
docs: 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