leecode.23. 合併K個升序連結串列
題目
給你一個連結串列陣列,每個連結串列都已經按升序排列。
請你將所有連結串列合併到一個升序連結串列中,返回合併後的連結串列。
示例一
輸入:lists = [[1,4,5],[1,3,4],[2,6]]
輸出:[1,1,2,3,4,4,5,6]
解釋:連結串列陣列如下:
[
1->4->5,
1->3->4,
2->6
]
將它們合併到一個有序連結串列中得到。
1->1->2->3->4->4->5->6
思路分析
- 使用優先佇列模擬小頂堆,每次取隊頭元素,作為最小的元素。
程式碼
class Solution {
public:
struct cmp{
bool operator()(ListNode * const &a, ListNode * const &b){//按照降序排列
return a->val > b->val;
}
};
ListNode* mergeKLists(vector<ListNode*>& lists) {
int n = lists.size();
ListNode head = ListNode(0);
priority_queue<ListNode *, vector<ListNode *>, cmp> q;
for(auto p : lists) if(p != NULL) q.push(p);
ListNode * p = &head;
while(!q.empty()){
p->next = q.top();
q.pop();
p = p->next;
if(p->next) q.push(p->next);
}
return head.next;
}
};
相關文章
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- 將兩個升序連結串列合併為一個新的 升序 連結串列並返回。(新手篇06)
- 合併K個排序連結串列排序
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- leetcode23. 合併K個排序連結串列LeetCode排序
- 23. 合併K個元素的有序連結串列
- 合併兩個有序連結串列
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- leetcode:21. 合併兩個有序連結串列(連結串列,簡單)LeetCode
- LeetCode 之 JavaScript 解答第23題 —— 合併K個有序連結串列(Merge K Sorted Lists)LeetCodeJavaScript
- 反轉連結串列、合併連結串列、樹的子結構
- 遞迴:21. 合併兩個有序連結串列遞迴
- JZ-016-合併兩個排序的連結串列排序
- 每日leetcode——21. 合併兩個有序連結串列LeetCode
- leetcode雙週賽(2)-合併兩個連結串列LeetCode
- Leetcode 21 合併兩個有序連結串列 學習感悟LeetCode
- 【LeetCode Hot 100】21. 合併兩個有序連結串列LeetCode
- Golang從合併連結串列聊遞迴Golang遞迴
- 連結串列合併-排序-logo列印參考排序Go
- 連結串列倒數第k個結點
- 【演算法-java實現】合併兩個有序連結串列演算法Java
- K個節點翻轉連結串列
- 7-24 兩個有序連結串列序列的合併 (20 分)
- 7-2 兩個有序連結串列序列的合併 (20分)
- Fourth. LeetCode 21:MergeTwo Sorted Lists 合併兩個有序連結串列LeetCode
- 牛客網高頻演算法題系列-BM5-合併k個已排序的連結串列演算法排序
- [每日一題] 第十八題:合併兩個排序的連結串列每日一題排序
- 【連結串列問題】打卡2:刪除單連結串列的第 K個節點
- [leetcode 25]. K 個一組翻轉連結串列LeetCode
- 02-線性結構1 兩個有序連結串列序列的合併 (15分)
- 劍指 Offer 25. 合併兩個排序的連結串列 JavaScript實現排序JavaScript
- 讓我們一起啃演算法----合併兩個有序連結串列演算法
- LeetCode 25. k個一組翻轉連結串列LeetCode
- 劍指offer——連結串列中倒數第k個結點
- 資料結構實驗之連結串列四:有序連結串列的歸併資料結構
- 測試開發每日演算法 Leecode21. 合併兩個有序連結串列演算法
- [C++]歸併排序(連結串列描述)C++排序
- 連結串列中的節點每k個一組翻轉