code: private Node<E> findPredecessorOf(Node<E> target) {
              Node<E> n = this;
              for (;;) {
                  Node<E> f = n.successor();
                  if (f == target)
                      return n;
                  if (f == null)
                      return null;
                  n = f;
              }
          }
docs: Returns the apparent predecessor of target by searching
  forward for it, starting at this node, patching up pointers
  while traversing. Used by predecessor().
  
  @return target's predecessor, or null if not found