Я считаю, что вы можете сделать это с помощью Быстрого сортировки на месте.
Я был неправ. Это не работает с односвязным списком, потому что для этого требуется возможность перехода назад по списку.
Таким образом, реальный вопрос заключается в том, как сделать быструю сортировку на месте.
Здесь мы идем ...
1) Возьмите указатель на первый, второй и последний круг связанного списка.
2) Шаг второй указатель в списке, пока вы не нажмете термин, который больше, чем первый термин.
3) Поверните третий указатель назад по списку, пока не нажмете термин, который меньше первого. Этот шаг не работает с односвязным списком.
4) Поменяйте значения второго и третьего указателей.
5) Повторите шаги 2) - 5), пока второй и третий указатели не станут равными друг другу.
6) Вставьте первый член после второго указателя
-AT этого момента, связанный список разделен на:
[термины меньше, чем X] х [точки больше, чем X]
7) Повторите шаги 2) - 7) для [терминов меньше x] и [терминов больше, чем x], пока размер блока [terms ________ than x] не будет равен единице.
Пространство: 3 указателя на слой.
O (журнал (п))
Время: То же, что быстрая сортировка
O (п журнал (п)) в общем
O (N * N) в худшем случае (если список либо уже сортированный или в обратном порядке)
отредактирована для форматирования и глупостей
Домашнее задание? Если да, скажите, как далеко вы дошли до сих пор. –
Возможный дубликат [Сортировка связанного списка] (http://stackoverflow.com/questions/768095/sorting-a-linked-list) – kennytm