Мне нужно случайным образом переставить N первых элементов односвязного списка длины n. Каждый элемент определяется как:
typedef struct E_s
{
struct E_s *next;
}E_t;
У меня есть корневой элемент, и я могу просмотреть весь связанный список размера n. Каков наиболее эффективный метод случайной перестановки только N первых элементов (начиная с корня)?
Итак, при заданном a-> b-> c-> d-> e-> f -> ... x-> y -> z Мне нужно сделать что-л. например, f-> a-> e-> c-> b -> ... x-> y-> z
Мой конкретный случай:
ОБНОВЛЕНИЕ: Я нашел эту статью . В нем говорится, что он представляет алгоритм из пространства стека O (log n) и ожидаемого времени O (n log n).