首页 > 代码库 > 148. Sort List
148. Sort List
题目:
Sort a linked list in O(n log n) time using constant space complexity.
链接: http://leetcode.com/problems/sort-list/
6/12/2017
10ms, 24%,merge sort, 并不满足constant space complexity的要求
需要重写constant space的
1 public class Solution { 2 public ListNode sortList(ListNode head) { 3 if (head == null || head.next == null) { 4 return head; 5 } 6 ListNode mid = findMid(head); 7 ListNode second = sortList(mid.next); 8 mid.next = null; 9 ListNode first = sortList(head); 10 return merge(first, second); 11 } 12 private ListNode findMid(ListNode head) { 13 if (head == null || head.next == null) { 14 return head; 15 } 16 ListNode slow = head, fast = head; 17 18 while (fast.next != null && fast.next.next != null) { 19 slow = slow.next; 20 fast = fast.next.next; 21 } 22 return slow; 23 } 24 private ListNode merge(ListNode first, ListNode second) { 25 ListNode dummy = new ListNode(-1); 26 ListNode cur = dummy; 27 while (first != null || second != null) { 28 if (first == null) { 29 cur.next = second; 30 break; 31 } else if (second == null) { 32 cur.next = first; 33 break; 34 } else { 35 if (first.val < second.val) { 36 cur.next = first; 37 first = first.next; 38 } else { 39 cur.next = second; 40 second = second.next; 41 } 42 } 43 cur = cur.next; 44 } 45 return dummy.next; 46 } 47 }
用bottom-up的方法可以避免O(logn)的空间复杂度。直接从最低层2个元素开始,然后4个元素,直到合并整个链表
有解释的代码
https://discuss.leetcode.com/topic/10382/bottom-to-up-not-recurring-with-o-1-space-complextity-and-o-nlgn-time-complextity
解释
https://discuss.leetcode.com/topic/4860/java-solution-with-strict-o-1-auxiliary-space-complexity
更多讨论
https://discuss.leetcode.com/category/156/sort-list
148. Sort List
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。