import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
public ListNode sortInList (ListNode head) {
// write code here
if (head == null || head.next == null){
return head;
}
// 左指针
ListNode left = head;
// 中间指针,需要先走一步
ListNode mid = head.next;
ListNode right = head.next.next;
while (right != null && right.next != null){
left = left.next;
mid = mid.next;
right = right.next.next;
}
left.next = null;
return buildListNode(sortInList(head), sortInList(mid));
}
private ListNode buildListNode(ListNode node1, ListNode node2){
if (node1 == null ){
return node2;
}
if (node2 == null){
return node1;
}
ListNode dummy = new ListNode(0);
ListNode cur = dummy;
while (node1 != null && node2 != null){
if (node1.val <= node2.val){
cur.next = node1;
node1 = node1.next;
} else{
cur.next = node2;
node2 = node2.next;
}
cur = cur.next;
}
cur.next = node1 == null ? node2 : node1;
return dummy.next;
}
}