LeetCode 35 排序鍊錶

2021-09-27 09:18:28 字數 1448 閱讀 7477

題目:

在 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.

* public class listnode

* }*/public class solution

int array = new int[len+1];

while (head != null)

array = array.orderby(a => a).toarray();

listnode res = fth;

for (int j = 0; j < len + 1; j++)

return res;

}}

演算法二:歸併排序,通過二分法遞迴,將鍊錶分成n個節點,然後依次比較相鄰節點,由小到大加入合併鍊錶頭部,雙指標交替進行,直至新增完成。

時間複雜度 o(l + r)(r代表鍊錶長度);空間複雜度為 o(n)

/**

* definition for singly-linked list.

* public class listnode

* }*/public class solution

listnode temp = low.next; low.next = null;

listnode left = sortlist(head);

listnode right = sortlist(temp);

listnode result = new listnode(0);

listnode ans=result;

while (right != null && left != null)

else

result = result.next;

}result.next = left != null ? left : right;

return ans.next;

}}

執行結果:

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....