148. Sort List
Sort a linked list in O(n log n) time using constant space complexity.
//利用归并排序的思想class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; ListNode prev = null; ListNode slow = head; ListNode fast = head; while (fast != null && fast.next != null ) { prev = slow; slow = slow.next; fast = fast.next.next; } prev.next = null;//将前半段链表设置为null结尾,链表被分成(head,p),(slow,fast) ListNode l1 = sortList(head); ListNode l2 = sortList(slow); return merge(l1, l2); } private ListNode merge(ListNode l1, ListNode l2) { ListNode l = new ListNode(0);//设置辅助节点 ListNode p = l; 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;//要把p向前移动 } if (l1 != null) p.next = l1; if (l2 != null) p.next = l2; return l.next; } }

更多精彩