code: public boolean removeFirstOccurrence(Object o) {
          Objects.requireNonNull(o);
          for (Node<E> p = first(); p != null; p = succ(p)) {
              E item = p.item;
              if (item != null && o.equals(item) && p.casItem(item, null)) {
                  unlink(p);
                  return true;
              }
          }
          return false;
      }
docs: Removes the first occurrence of the specified element from this deque.
  If the deque does not contain the element, it is unchanged.
  More formally, removes the first element {@code e} such that
  {@code o.equals(e)} (if such an element exists).
  Returns {@code true} if this deque contained the specified element
  (or equivalently, if this deque changed as a result of the call).
  
  @param o element to be removed from this deque, if present
  @return {@code true} if the deque contained the specified element
  @throws NullPointerException if the specified element is null