import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类 the head node
* @return ListNode类
* @method 单链表切分为两个链表,再排序,再合并有序链表
*/
public ListNode sortInList (ListNode head) {
if (head == null || head.next == null)
return head;
// write code here
// 1. 切分链表
ListNode slow = head , fast = head.next;
while(fast != null && fast.next != null ){
fast = fast.next.next;
slow = slow.next;
}
ListNode head2= slow.next;
slow.next = null;
// 2.排序
ListNode left = sortInList(head);
ListNode right = sortInList(head2);
// 3.合并两个有序链表
ListNode ans = new ListNode(-1);
ListNode res = ans;
while(left != null && right != null){
if(left.val <= right.val) {
res.next = new ListNode(left.val);
left = left.next;
}else {
res.next = new ListNode(right.val);
right = right.next;
}
res = res.next;
}
if(left == null){ res.next = right;}
if(right == null){ res.next = left;}
return ans.next;
}
}