Есть двусвязный список который мне нужно отсортировать за O(n Log n) время. Я бы хотел использовать merge sort
, но я никак не могу сообразить, как это реализовать путём расширения класса SplDoublyLinkedList
из стандартной библиотеки PHP.
Основная проблема в том, что я не могу разделить SplDoublyLinkedList
пополам без выделения дополнительной памяти. Если бы я имел объекты отдельных нод, я бы легко мог установить указатель next
ноды из середины списка на null
, и сохранить указатель на следующую ноду в отдельную переменную, таким образом получив уже два связных списка. Но SplDoublyLinkedList
не позволяет провернуть такую операцию.
Я имею ввиду нечто подобное в Java:
node mergeSort(node h)
{
if (h == null || h.next == null) {
return h;
}
node middle = getMiddle(h);
node nextOfMiddle = middle.next;
middle.next = null;
node left = mergeSort(h);
node right = mergeSort(nextofmiddle);
node sortedlist = sortedMerge(left, right);
return sortedlist;
}
Должен ли я действительно использовать SplDoublyLinkedList
в этом случае, или мне лучше написать свою собственую реализацию связного списка?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Использую библиотеку simple_html_domСчитываю csv файл