static Node sortList(Node head) {
if (head == null || head.next == null) {
return head;
}
Node mid = findMiddle(head);
Node right = mid.next;
mid.next = null;
Node pre = sortList(head);
Node pos = sortList(right);
return merge(pre, pos);
}
static Node findMiddle(Node head) {
Node slow = head;
Node fast = head.next;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
private static Node merge(Node left, Node right) {
Node head = new Node();
Node tmp = head;
while (left != null && right != null) {
if (left.val <= right.val){
tmp.next = left;
left = left.next;
}else {
tmp.next = right;
right = right.next;
}
tmp = tmp.next;
}
while (left!= null){
tmp.next = left;
tmp = tmp.next;
left = left.next;
}
while (right!=null){
tmp.next = right;
tmp = tmp.next;
right = right.next;
}
return head.next;
}
链表排序复杂度O(nlogn)
最新推荐文章于 2023-10-14 14:12:30 发布