您的位置:首页 > 编程语言 > Java开发

148. Sort List | Java最短代码实现

2016-03-16 10:17 676 查看
原题链接:148. Sort List
【思路】

本题考查归并排序。由于没有random access指针,那么显然是不是合快排。归并排序的基本思想:找到链表的mid节点,然后递归前半部分和后半部分分别进行归并排序,每次排完序之后都要对排好序的链表进行归并:

public ListNode sortList(ListNode head) {
if (head  == null || head.next == null) return head;
ListNode mid = getMidListNode(head);
ListNode list2 = mid.next;
mid.next = null;
return mergeList(sortList(head), sortList(list2));
}
private ListNode mergeList(ListNode list1, ListNode list2) {
ListNode dummyHead = new ListNode(0);
ListNode curr = dummyHead;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
curr.next = list1;
list1 = list1.next;
} else {
curr.next = list2;
list2 = list2.next;
}
curr = curr.next;
}
curr.next = list1 != null ? list1 : list2;
return dummyHead.next;
}
private ListNode getMidListNode(ListNode head) {
ListNode slow = head, fast = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
15 / 15 test
cases passed. Runtime: 8
ms Your runtime beats 42.29% of javasubmissions.

欢迎优化!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: