classListNode{intval;
ListNode next=null;publicListNode(){
}public ListNode(intval){this.val=val;
}
}public classSortList {publicListNode Merge(ListNode first,ListNode second){
ListNode rear;
ListNode head;
rear=head=newListNode();while(first!=null&&second!=null){if(first.val<=second.val){
rear.next=first;
rear=first;
first=first.next;
}else{
rear.next=second;
rear=second;
second=second.next;
}
}if(first!=null)
rear.next=first;elserear.next=second;returnhead.next;
}publicListNode Divide(ListNode first){ //将一个链表划分成两个基本相等的子链表if(first==null)return null;
ListNode mid=first;
ListNode pos=mid.next;while(pos!=null){
pos=pos.next;if(pos!=null){
pos=pos.next;
mid=mid.next;
}
}
ListNode q=mid.next;
mid.next=null;returnq;
}public voidMergeSort(ListNode first){ //合并排序if(first!=null&&first.next!=null){
ListNode second=Divide(first); //将链表划分成两部分
MergeSort(first); //递归
MergeSort(second);
Merge(first, second);
}
}public static voidmain(String[] args) {//TODO Auto-generated method stub
ListNode first1 = new ListNode(0);
ListNode rear1=first1;for(int i=9;i>=1;i--){
ListNode q= newListNode(i);
rear1.next=q;
rear1=q;
}
ListNode q=first1;while(q!=null){
System.out.print(q.val+ ",");
q=q.next;
}
System.out.println();
SortList sl= newSortList();
sl.MergeSort(first1);
ListNode p=first1;while(p!=null){
System.out.print(p.val+ ",");
p=p.next;
}
System.out.println();
}
}