148. Sort List
Problem:
Merge sort实现题。最底层递归返回条件是ListNode 只剩下一个了,就返回它自己。
findMid还是用fast 从head.next开始。
Sort a linked list in O(n log n) time using constant space complexity.
Example 1:
Input: 4->2->1->3 Output: 1->2->3->4
Example 2:
Input: -1->5->3->4->0 Output: -1->0->3->4->5Analysis:
Merge sort实现题。最底层递归返回条件是ListNode 只剩下一个了,就返回它自己。
findMid还是用fast 从head.next开始。
class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; ListNode mid = findMid(head); ListNode right = sortList(mid.next); mid.next = null; ListNode left = sortList(head); return merge(left, right); } private ListNode findMid(ListNode head) { ListNode slow = head; ListNode fast = head.next; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } return slow; } private ListNode merge(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode p = dummy; while (l1 != null && l2 != null) { if (l1.val < l2.val) { p.next = l1; l1 = l1.next; } else { p.next = l2; l2 = l2.next; } p = p.next; } if (l1 != null) { p.next = l1; } else { p.next = l2; } return dummy.next; } }
评论
发表评论