code: @Override
      @LogarithmicTime(amortized = true)
      public AddressableHeap.Handle<K, V> deleteMin() {
          if (size == 0) {
              throw new NoSuchElementException();
          }
          Node<K, V> z = minRoot;
  
          // move z children into root list
          Node<K, V> x = z.child;
          while (x != null) {
              Node<K, V> nextX = (x.next == x) ? null : x.next;
  
              // clear parent
              x.parent = null;
  
              // remove from child list
              x.prev.next = x.next;
              x.next.prev = x.prev;
  
              // add to root list
              x.next = minRoot.next;
              x.prev = minRoot;
              minRoot.next = x;
              x.next.prev = x;
              roots++;
  
              // advance
              x = nextX;
          }
          z.degree = 0;
          z.child = null;
  
          // remove z from root list
          z.prev.next = z.next;
          z.next.prev = z.prev;
          roots--;
  
          // decrease size
          size--;
  
          // update minimum root
          if (z == z.next) {
              minRoot = null;
          } else {
              minRoot = z.next;
              consolidate();
          }
  
          // clear other fields
          z.next = null;
          z.prev = null;
  
          return z;
      }
docs: {@inheritDoc}