docs: private Node linkFirst(E e) {
          final Node<E> newNode = newNode(Objects.requireNonNull(e));
  
          restartFromHead:
          for (;;)
              for (Node<E> h = head, p = h, q;;) {
                  if ((q = p.prev) != null &&
                      (q = (p = q).prev) != null)
                      // Check for head updates every other hop.
                      // If p == q, we are sure to follow head instead.
                      p = (h != (h = head)) ? h : q;
                  else if (p.next == p) // PREV_TERMINATOR
                      continue restartFromHead;
                  else {
                      // p is first node
                      NEXT.set(newNode, p); // CAS piggyback
                      if (PREV.compareAndSet(p, null, newNode)) {
                          // Successful CAS is the linearization point
                          // for e to become an element of this deque,
                          // and for newNode to become "live".
                          if (p != h) // hop two nodes at a time; failure is OK
                              HEAD.weakCompareAndSet(this, h, newNode);
                          return newNode;
                      }
                      // Lost CAS race to another thread; re-read prev
                  }
              }
      }