public ListNode sortInList (ListNode head) {
if (head == null || head.next == null){
return head;
}
// 使用快慢指针寻找链表的中点
ListNode fast = head.next;
ListNode slow = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
ListNode tmp = slow.next;
slow.next = null;
// 递归左右两边进行排序
ListNode left = sortInList(head);
ListNode right = sortInList(tmp);
// 创建新的链表
ListNode h = new ListNode(0);
ListNode res = h;
// 合并 left right两个链表
while (left != null && right != null) {
// left right链表循环对比
if (left.val < right.val) {
h.next = left;
left = left.next;
} else {
h.next = right;
right = right.next;
}
h = h.next;
}
// 最后添加未对比的链表部分判断左链表是否为空
h.next = left != null ? left : right;
return res.next;
}