【发布时间】:2017-04-23 07:52:55
【问题描述】:
如何去做这件事?自下而上的归并排序方式是否满足O(1) 额外空间要求?在传统的归并排序中是什么使它不是O(1) 空间?
这是一种方法吗?
void mergeSort() {
ListNode merge = this.head;
this.head = mergeSort(merge);
}
ListNode mergeSort(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode slow = head; ListNode fast = head.next;
while(fast!=null && fast.next !=null) {
slow = slow.next;
fast = fast.next.next;
}
ListNode left = head; ListNode right = slow.next;
slow.next = null;
left = mergeSort(left);
right = mergeSort(right);
return merge(left, right);
}
ListNode merge(ListNode L, ListNode R) {
if(L==null) return R;
if(R==null) return L;
ListNode h = null;
if(L.val <= R.val )){
h = L;
h.next = merge(L.next, R);
} else {
h = R;
h.next = merge(L, R.next);
}
return h;
}
【问题讨论】:
-
您没有指定语言 Java、C、C++?最重要的是您可以生成的代码或您可以进行的研究。因此,我们需要该代码来帮助您。否则,您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请查看这些链接以了解 How to write effective questions 或 How to create a Minimal, Complete, and Verifiable example。
标签: java linked-list mergesort space-complexity