【多次過】Lintcode 98. 連結串列排序
阿新 • • 發佈:2018-11-08
在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; } }