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; } }