Хм. Со связанным списком это должно быть выполнимо - вы будете искать первую «ложную» запись и сохранять ее как «место вставки». (Если нет «ложных» записей, то вы все равно сделали :) Затем просто выполните итерацию по всему списку - если вы находитесь до места вставки и найдете «ложную» запись или если вы после места вставки и найдите «истинную» запись, затем переместите ее непосредственно перед «местом вставки». Пока что, так O(n)
.
Теперь вы можете преобразовать массив в связанный список в O(n)
и скопировать данные back в массив в O(n)
. Поэтому я думаю, что это будет работать с точки зрения сложности - но это не на месте. Я подумаю, можно ли это сделать на месте ...