LeetCode刷題記125-148. 排序連結串列
LeetCode刷題記125
148. 排序連結串列
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode merge(ListNode p1, ListNode p2) {
if (p1 == null) return p2;
if (p2 == null) return p1;
ListNode _p1 = p1;
ListNode _p2 = p2;
ListNode pre_p1 = null;
while (p1 != null && p2 != null) {
if (p1.val < p2.val) {
if (p1.next != null) {
if (p1.next.val >= p2.val) {
ListNode tmp = p2.next;
p2.next = p1.next;
p1.next = p2;
p2 = tmp;
}
pre_p1 = p1;
p1 = p1.next;
} else {
p1.next = p2;
return _p1;
}
} else {
ListNode tmp = p2.next;
p2.next = p1;
if (pre_p1 != null) {
pre_p1.next = p2;
}
if (p1 == _p1) {
_p1 = p2;
}
pre_p1 = p2;
p2 = tmp;
}
}
return _p1;
}
public ListNode sortList(ListNode head) {
if(head==null || head.next==null) return head;
ListNode slow = head; //慢指標
ListNode fast = head.next; //快指標
while(fast!=null && fast.next!=null){ //快慢指標找到連結串列中點
slow = slow.next; //慢指標走一步
fast = fast.next.next; //快指標走兩步
}
ListNode rightHead = slow.next; //連結串列第二部分的頭節點
slow.next = null; //cut 連結串列
ListNode left = sortList(head); //遞迴排序前一段連結串列
ListNode right = sortList(rightHead); //遞迴排序後一段連結串列
return merge(left,right);
}
}
1/3
125/150
相關文章
- (連結串列)連結串列的排序問題排序
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 單連結串列的排序問題排序
- LeetCode連結串列專題LeetCode
- Leetcode刷題之連結串列增加頭結點的字首節點LeetCode
- 【C++ 資料結構:連結串列】二刷LeetCode707設計連結串列C++資料結構LeetCode
- LeetCode 刷題日記 19. 刪除連結串列的倒數第N個節點LeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- leetcode23. 合併K個排序連結串列LeetCode排序
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- 連結串列-插入排序排序
- 連結串列歸併排序排序
- leetcode題目解析(js)--連結串列LeetCodeJS
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- 148. 排序連結串列排序
- C語言 連結串列排序C語言排序
- LeetCode-連結串列LeetCode
- 演算法:排序連結串列:歸併排序演算法排序
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- leetcode排序專題演算法刷題LeetCode排序演算法
- LeetCode 第 86 號問題:分割連結串列LeetCode
- LeetCode 連結串列解題彙總 Java版LeetCodeJava
- LeetCode刷題記63-109. 有序連結串列轉換二叉搜尋樹【檢視解法】LeetCode
- 合併K個排序連結串列排序
- 連結串列專題——面試中常見的連結串列問題面試
- leetcode 反轉連結串列LeetCode
- LeetCode 86 ——分隔連結串列LeetCode
- PHPer也刷《劍指Offer》之連結串列PHP
- LeetCode 刷題筆記LeetCode筆記
- leetcode刷題筆記LeetCode筆記
- LeetCode刷題記錄LeetCode
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- [連結串列]leetcode138-複製帶隨即指標的連結串列LeetCode指標
- 【LeetCode連結串列#9】圖解:兩兩交換連結串列節點LeetCode圖解
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題