Dada una lista de enlaces con punteros derechos, cada elemento de la lista tiene un enlace descendente que contiene otra lista de enlaces con punteros descendentes, de modo que cada lista derecha y abajo están ordenadas. ¿Cuál es la forma más rápida de aplanar la lista de enlaces de forma ordenada?

Mi solución para esto es O (Nlog (K)) donde N es el número total de números y K es el número de las listas enlazadas hacia abajo.

Primero declare los punteros K y P’i señala la i ésima lista vinculada.
Empuje todos los elementos puntiagudos en el montón mínimo con pares (elemento, i)
luego haga estallar y mueva el puntero de elementos reventados 1 hacia abajo

Creo que sería más fácil si escribiera un pseudocódigo

  puntero P [K]

 mientras que (i <K)
     P [i] = raíz
     heap.push (par (P [i] .key, i))
     root = root.right

 while (! heap.empty ())
     temp = heap.top ();
     heap.pop ();
     imprimir temp. primero
     P [temp.second] = P [temp.second] .down
     heap.push (par (P [i] .key, i))

Y también hay una respuesta más detallada en stackexchange
Montón: asigne un algoritmo de tiempo $ O (n \ lg k) $ para combinar listas ordenadas de $ k $ en una lista ordenada