code: private boolean findAndRemove(Object e) {
          if (e != null) {
              for (Node pred = null, p = head; p != null; ) {
                  Object item = p.item;
                  if (p.isData) {
                      if (item != null && item != FORGOTTEN && e.equals(item) &&
                          p.tryMatchData()) {
                          unsplice(pred, p);
                          return true;
                      }
                  }
                  else if (item == null)
                      break;
                  pred = p;
                  if ((p = p.next) == UNLINKED) { // stale
                      pred = null;
                      p = head;
                  }
              }
          }
          return false;
      }
docs: Main implementation of remove(Object)