共计 673 个字符,预计需要花费 2 分钟才能阅读完成。
148. 排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1: | |
输入: 4->2->1->3 | |
输出: 1->2->3->4 | |
示例 2: | |
输入: -1->5->3->4->0 | |
输出: -1->0->3->4->5 |
分析:和这道题差不多阿,都是链表,用归并排序做。题目要求 O(nlogn),好像就是快排和归并? 递归的终止条件是一对有序对。
class Solution {public ListNode sortList(ListNode head) {if (head == null || head.next == null) | |
return head; | |
ListNode fast = head.next, slow = head; | |
while (fast != null && fast.next != null) { | |
slow = slow.next; | |
fast = fast.next.next; | |
} | |
ListNode tmp = slow.next; | |
slow.next = null; | |
ListNode left = sortList(head); | |
ListNode right = sortList(tmp); | |
ListNode h = new ListNode(0); | |
ListNode res = h; | |
while (left != null && right != null) {if (left.val < right.val) { | |
h.next = left; | |
left = left.next; | |
} else { | |
h.next = right; | |
right = right.next; | |
} | |
h = h.next; | |
} | |
h.next = left != null ? left : right; | |
return res.next; | |
} | |
} |
正文完