题目:
Sort a linked list in O(n log n) time using constant space complexity.
思路:把两个已有顺序链表的合并想法。
具体代码:
public ListNode sortList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode p = head;
ListNode end = head.next.next;
while(end != null && end.next != null){
p = p.next;
end = end.next.next;
}
ListNode p2 = sortList(p.next);
p.next = null;
ListNode p1 = sortList(head);
return MegerList(p1,p2);
}
// 对两个已排序的链表进行合并
public ListNode MegerList(ListNode head1,ListNode head2){
ListNode phead = new ListNode(Integer.MIN_VALUE);
ListNode p = phead;
while(head1 != null && head2 != null){
if(head1.val < head2.val){
p.next = head1;
head1 =head1.next;
}
else{
p.next = head2;
head2 =head2.next;
}
p = p.next;
}
if(head1 != null){
p.next = head1;
}
if(head2 != null){
p.next = head2;
}
return phead.next;
}