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題目解析(js)--連結串列LeetCodeJS
- LeetCode 刷題日記 19. 刪除連結串列的倒數第N個節點LeetCode
- leetcode23. 合併K個排序連結串列LeetCode排序
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 2024/12/1 【連結串列】 LeetCode 面試題 02.07. 連結串列相交LeetCode面試題
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode-連結串列LeetCode
- LeetCode刷題記63-109. 有序連結串列轉換二叉搜尋樹【檢視解法】LeetCode
- LeetCode 連結串列解題彙總 Java版LeetCodeJava
- LeetCode 第 86 號問題:分割連結串列LeetCode
- 148. 排序連結串列排序
- 連結串列-插入排序排序
- leetcode 反轉連結串列LeetCode
- LeetCode 86 ——分隔連結串列LeetCode
- leetcode排序專題演算法刷題LeetCode排序演算法
- LeetCode 刷題筆記LeetCode筆記
- LeetCode刷題記錄LeetCode
- leetcode刷題筆記LeetCode筆記
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- leetcode 92 反轉連結串列ⅡLeetCode
- LeetCode-143-重排連結串列LeetCode
- LeetCode 86. 分隔連結串列LeetCode
- leetcode-82:刪除排序連結串列中重複的元素-iiLeetCode排序
- 演算法:排序連結串列:歸併排序演算法排序
- 2024/12/2【連結串列】LeetCode 142 環形連結串列 II 【X】LeetCode
- leetcode刷題記錄 661~LeetCode
- leetcode刷題筆記605LeetCode筆記
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- 【leetcode 簡單】第三十七題 相交連結串列LeetCode