Я пытаюсь перетасовать связанный список, используя алгоритм разделения и покоя, который случайным образом перемещает связанный список в linearithmic (n log n) время и логарифмическое (log n) дополнительное пространство.
Я знаю, что я могу сделать Knuth shuffle, подобный тому, который может быть использован в простом массиве значений, но я не уверен, как это сделать с помощью divide-and-завоевания. Я имею в виду, что я действительно разделяю? Разделяю ли я только каждый отдельный node в списке, а затем произвольно собираю список обратно, используя какое-то случайное значение?
Или я могу дать каждому node случайное число, а затем выполнить слияние узлов на основе случайных чисел?