如何排序SplDoublyLinkedList?

时间:2019-06-03 17:45:23

标签: php linked-list singly-linked-list doubly-linked-list

有一个链表需要在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类吗,还是我需要编写自己的链表实现?

0 个答案:

没有答案