就是用List来实现merge sort.
import java.io.*;
import java.util.*;
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
static ListNode initializeLinkList(ArrayList<Integer> arrList){
ListNode head = new ListNode(arrList.get(0));
ListNode cNode = head;
for(int i=1;i<arrList.size();i++)
{
cNode.next = new ListNode(arrList.get(i));
cNode = cNode.next;
}
return head;
}
static void showList(ListNode head)
{
while(head != null)
{
System.out.println(head.val);
head = head.next;
}
}
}
public class Solution {
public ListNode medianNode(ListNode head)
{
ListNode osNode = head;
ListNode tsNode = head;
while(tsNode.next != null && tsNode.next.next !=null)
{
osNode = osNode.next;
tsNode = tsNode.next.next;
}
return osNode;
}
public ListNode mergeList(ListNode head1, ListNode head2)
{
if(head1 == null)
return head2;
else if(head2 == null)
return head1;
ListNode head = null, cnode = null;
if(head1.val < head2.val)
{
head = head1;
head1 = head1.next;
}
else
{
head = head2;
head2 = head2.next;
}
cnode = head;
while(head1 != null && head2 != null)
{
if(head1.val < head2.val)
{
cnode.next = head1;
head1 = head1.next;
}
else
{
cnode.next = head2;
head2 = head2.next;
}
cnode= cnode.next;
}
while(head1 != null)
{
cnode.next = head1;
cnode = cnode.next;
head1 = head1.next;
}
while(head2 != null)
{
cnode.next = head2;
cnode = cnode.next;
head2 = head2.next;
}
return head;
}
public ListNode sortList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode mNode = medianNode(head);
ListNode head1 = head;
ListNode head2 = mNode.next;
mNode.next = null;
head1 = sortList(head1);
head2 = sortList(head2);
head = mergeList(head1,head2);
return head;
}
}