code: final Node<E> pred(Node<E> p) {
          Node<E> q = p.prev;
          // j2objc: q == p.prev == sentinel means node GC-unlinked
          return (sentinel() == q) ? last() : q;
      }
docs: Returns the predecessor of p, or the last node if p.prev has been
  linked to self, which will only be true if traversing with a
  stale pointer that is now off the list.