Sort a linked list in?O(n?log?n) time using constant space complexity.
?
/** * 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; } ListNode first = head; ListNode second = head; while (first.next != null && first.next.next != null) { first = first.next.next; second = second.next; } ListNode head2 = second.next; second.next = null; ListNode leftlist = null; ListNode rightlist =null; if (head != head2) { leftlist = sortList(head); rightlist = sortList(head2); } return mergeTwoLists(leftlist, rightlist); } private ListNode mergeTwoLists(ListNode leftlist, ListNode rightlist) { // TODO Auto-generated method stub if (leftlist == null) { return rightlist; } if (rightlist == null) { return leftlist; } ListNode head = leftlist.val < rightlist.val ? leftlist : rightlist; ListNode cur1 = head == leftlist ? leftlist : rightlist; ListNode cur2 = head == leftlist ? rightlist : leftlist; ListNode pre = null; ListNode next = null; while (cur1 != null && cur2 != null) { if (cur1.val <= cur2.val) { pre = cur1; cur1 = cur1.next; } else { next = cur2.next; pre.next = cur2; cur2.next = cur1; pre = cur2; cur2 = next; } } pre.next = cur1 == null ? cur2 : cur1; return head; } }
?
原文:http://hcx2013.iteye.com/blog/2251059