有一个链表需要在O(n Log n)
时间内进行排序。
我想使用合并排序,但是我无法弄清楚如何通过扩展SplDoublyLinkedList
类来实现它。
我遇到的主要问题是,我不能在不分配额外内存的情况下将SplDoublyLinkedList
分成两半。
如果我有独立的节点,则可以轻松地将节点的指针“ next”设置为空值,但是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
类吗,还是我需要编写自己的链表实现?