private void link(Node<K, V> y, Node<K, V> x) {
        // remove from root list
        y.prev.next = y.next;
        y.next.prev = y.prev;

        // one less root
        roots--;

        // clear if marked
        y.mark = false;

        // hang as x's child
        x.degree++;
        y.parent = x;

        Node<K, V> child = x.child;
        if (child == null) {
            x.child = y;
            y.next = y;
            y.prev = y;
        } else {
            y.prev = child;
            y.next = child.next;
            child.next = y;
            y.next.prev = y;
        }
    }
private void link ( Node < K , V > y , Node < K , V > x ) { y . prev . next = y . next ; y . next . prev = y . prev ; roots -- ; y . mark = false ; x . degree ++ ; y . parent = x ; Node < K , V > child = x . child ; if ( child == null ) { x . child = y ; y . next = y ; y . prev = y ; } else { y . prev = child ; y . next = child . next ; child . next = y ; y . next . prev = y ; } }
/*
Remove node y from the root list and make it a child of x. Degree of x
increases by 1 and y is unmarked if marked.