在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
題目要求時間空間複雜度分別為o(nlogn)o(nlogn)和o(1)o(1),根據時間複雜度我們自然想到二分法,從而聯想到歸併排序;
它是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列。
package leetcode_2;
public class leetcode148_mergesortlist
if (head.next == null)
listnode fast = head;
listnode slow = head;
listnode slow_pre = null;
while (fast != null && fast.next != null)
slow_pre.next = null; //左右要斷開
listnode left = sortlist(head); //左半段
listnode right = sortlist(slow); //右半段
return merge(left,right);//對已經排好序的左半段和右半段進行合併
}private listnode merge(listnode left, listnode right) else
p = p.next;
} if (left != null) else
return head.next;
} public static void main(string args)
}}
Leetcode 148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5在陣列儲存下的歸併排序,需要借出輔助空間完成,而鍊錶儲存的歸併排序,不需要借助輔助空間,直接在原來的鍊錶上進行操作,...
LeetCode 148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3輸出 1 2 3 4示例 2 輸入 1 5 3 4 0輸出 1 0 3 4 5歸併這裡我感覺有點不符合題意 不符合常數空間 如果是快排的話呢,交換節點還是很麻煩的,所以快排交換值了 癱.jpg cl...
leetcode148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 看到題目就知道要二分,這裡用的是遞迴版歸併 definition for singly linked list....