标签:get else time put amp private new stat sorted
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->5
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null)return head; final ListNode middle = findMiddle(head); final ListNode head2 = middle.next; middle.next = null; // 断开 final ListNode l1 = sortList(head); // 前半段排序 final ListNode l2 = sortList(head2); // 后半段排序 return mergeTwoLists(l1, l2); } // Merge Two Sorted Lists private static ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(-1); for (ListNode p = dummy; l1 != null || l2 != null; p = p.next) { int val1 = l1 == null ? Integer.MAX_VALUE : l1.val; int val2 = l2 == null ? Integer.MAX_VALUE : l2.val; if (val1 <= val2) { p.next = l1; l1 = l1.next; } else { p.next = l2; l2 = l2.next; } } return dummy.next; } // 快慢指针找到中间节点 private static ListNode findMiddle(ListNode head) { if (head == null) return null; ListNode slow = head; ListNode fast = head.next; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } return slow; } }
这种答案就是让人看着非常的舒适,有一种为什么他妈的这么好的感觉,嗯
标签:get else time put amp private new stat sorted
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/10541651.html