版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/83744359
在O(n log n)时间复杂度和常数级的空间复杂度下给链表排序。
样例
给出 1->3->2->null
,给它排序变成 1->2->3->null
。
挑战
分别用归并排序和快速排序做一遍。
解题思路1:
快排。参考快速排序完美优化版
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param head: The head of linked list.
* @return: You should return the head of the sorted linked list, using constant space complexity.
*/
public ListNode sortList(ListNode head) {
// write your code here
quickSort(head, null);
return head;
}
private void quickSort(ListNode left, ListNode right){
if(left == right)
return;
ListNode p = partition(left, right);
quickSort(left, p);
quickSort(p.next, right);
}
private ListNode partition(ListNode left, ListNode right){
int v = left.val;
ListNode j = left;
for(ListNode i=j.next; i != right; i = i.next){
if(i.val < v){
j = j.next;
swapValue(j, i);
}
}
swapValue(left, j);
return j;
}
private void swapValue(ListNode node1, ListNode node2){
int temp = node1.val;
node1.val = node2.val;
node2.val = temp;
}
}