
class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; ListNode p = head, q = head; //注意:要保证p在左半区的最后一个,如两个节点的左边一个。 while (p.next != null && p.next.next != null) { p = p.next.next; q = q.next; } ListNode next = q.next; q.next = null; ListNode l1 = sortList(head); ListNode l2 = sortList(next); return merge(l1, l2); } private ListNode merge(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(-1); ListNode cur = dummy; while (l1 != null && l2 != null) { if (l1.val < l2.val) { cur.next = l1; l1 = l1.next; } else { cur.next = l2; l2 = l2.next; } cur = cur.next; } cur.next = l1 == null ? l2 : l1; return dummy.next; }}