148. 排序連結串列
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
class Solution {
// 解題思路歸併排序
public ListNode sortList(ListNode head) {
if(head==null || head.next==null){
return head;
}
ListNode fast=head.next,slow=head;
while(fast!=null && fast.next!=null){
slow = slow.next;
//三個節點以上的時候 fast==null
// 四個節點的時候 slow=2 fast=2
// 5個節點的時候
fast = fast.next.next;
}
//當只有兩個節點的時候 tmp =head
ListNode tmp = slow.next;
slow.next = null;
ListNode left = sortList(head);
ListNode right = sortList(tmp);
//虛擬頭結點
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;
}
}
相關文章
- 連結串列-插入排序排序
- 演算法:排序連結串列:歸併排序演算法排序
- 合併K個排序連結串列排序
- 單連結串列的排序問題排序
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- [C++]歸併排序(連結串列描述)C++排序
- 利用遞迴實現連結串列的排序(歸併排序)遞迴排序
- 連結串列合併-排序-logo列印參考排序Go
- 單連結串列的排序(插入,選擇,冒泡)排序
- 連結串列 - 單向連結串列
- 連結串列-迴圈連結串列
- 連結串列-雙向連結串列
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- leetcode23. 合併K個排序連結串列LeetCode排序
- 147. 對連結串列進行插入排序排序
- LeetCode刷題記125-148. 排序連結串列LeetCode排序
- 連結串列4: 迴圈連結串列
- 連結串列-雙向通用連結串列
- 連結串列-單連結串列實現
- 連結串列-雙向非通用連結串列
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 連結串列入門與插入連結串列
- Leetcode_86_分割連結串列_連結串列LeetCode
- JZ-016-合併兩個排序的連結串列排序
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- 資料結構-單連結串列、雙連結串列資料結構
- 連結串列
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- 從未排序的連結串列中刪除重複項排序
- 力扣 147. 對連結串列進行插入排序力扣排序
- 單連結串列建立連結串列出現問題
- **203.移除連結串列元素****707.設計連結串列****206.反轉連結串列**
- php連結串列PHP
- 連結串列逆序
- 2、連結串列
- 連結串列(python)Python
- 重排連結串列
- 單連結串列