数据通过链表方式存储实现代码如下:
public static ListNode mergeSortList(ListNode head) {
if(head==null||head.next==null)
return head;
ListNode mid = getMid(head);
ListNode right = mergeSortList(mid.next);
mid.next=null;
ListNode left = mergeSortList(head);
return merge(left, right);
}
public static ListNode getMid(ListNode head){
ListNode p=head;
ListNode q = p.next;
while(q!=null&&q.next!=null){
p=p.next;
q=q.next.next;
}
return p;
}
public static ListNode merge(ListNode left,ListNode right){
ListNode result;
if(left==null)
return right;
if(right==null)
return left;
if(left.val<right.val){
result=left;
left=left.next;
}
else{
result=right;
right=right.next;
}
ListNode temp=result;
while(left!=null&&right!=null){
if(left.val<right.val){
temp.next=left;
left=left.next;
}
else{
temp.next=right;
right=right.next;
}
temp=temp.next;
}
if(left!=null)
temp.next=left;
if(right!=null)
temp.next=right;
return result;
}