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;
}
}
相關文章
- (連結串列)連結串列的排序問題排序
- 連結串列-插入排序排序
- 連結串列歸併排序排序
- C語言 連結串列排序C語言排序
- 演算法:排序連結串列:歸併排序演算法排序
- 合併K個排序連結串列排序
- 單連結串列的排序問題排序
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- [C++]歸併排序(連結串列描述)C++排序
- 求n個排序連結串列的交集排序
- 利用遞迴實現連結串列的排序(歸併排序)遞迴排序
- 單連結串列的排序(插入,選擇,冒泡)排序
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 連結串列合併-排序-logo列印參考排序Go
- 連結串列入門與插入連結串列
- 連結串列
- 實戰資料結構(10)_單連結串列的就地排序資料結構排序
- 147. 對連結串列進行插入排序排序
- (樹)根據排序陣列或者排序連結串列重新構建BST樹排序陣列
- javascript中的連結串列結構—雙向連結串列JavaScript
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- leetcode23. 合併K個排序連結串列LeetCode排序
- 從未排序的連結串列中刪除重複項排序
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- 非迴圈單連結串列的建立、遍歷、排序等排序
- php連結串列PHP
- 連結串列操作
- 連結串列逆序
- 2、連結串列
- 將二叉排序樹BST轉換成排序的雙向連結串列排序
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 連結串列以及golang介入式連結串列的實現Golang