【LeetCode】【HOT】148. 排序链表
package hot;
import java.util.Arrays;
class ListNode{
int val;
ListNode next;
ListNode(int val){
this.val = val;
}
}
public class Solution148 {
public static void main(String[] args) {
ListNode l1 = new ListNode(-1);
ListNode l2 = new ListNode(5);
ListNode l3 = new ListNode(3);
ListNode l4 = new ListNode(4);
ListNode l5 = new ListNode(0);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
Solution148 solution = new Solution148();
int[] res = new int[5];
ListNode head = solution.method(l1);
for(int i = 0; i < 5; i++){
res[i] = head.val;
head = head.next;
}
System.out.println(Arrays.toString(res));
}
private ListNode method(ListNode head){
if(head == null || head.next == null){
return head;
}
ListNode slow = head;
ListNode fast = head.next;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
ListNode temp = slow.next;
slow.next = null;
ListNode left = method(head);
ListNode right = method(temp);
ListNode h = new ListNode(0);
ListNode res = h;
while(left != null && right != null){
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;
}
}
//时间复杂度为 O(nlogn)
//空间复杂度为 O(1)