Merge k Sorted Lists(leetcode)
2017-09-24 11:19
120 查看
Merge k Sorted Lists
Merge k Sorted Lists题目
解决
题目
leetcode题目Merge k sorted linked lists and return it as one sorted list.
将已知的K个有序链表合并成1个有序链表。
解决
想法:采用分治算法,先将两个两个链表合并,直到链表只剩一个,此时就能够得到结果。两个链表合并,可以参考数据库的“两路归并外排序”,每次取两个链表的表头
a、
b,比较其大小。假设
a < b,则将节点
a加进合并链表中,节点
b和节点
a->next接着比较,直到其中一个链表结束。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { if (lists.empty()) { return NULL; } while (true) { if (lists.size() == 1) { // 表示K个链表已经合并完 break; } ListNode* result = merge2Lists(lists[0], lists[1]); // 确定合并链表的头节点 lists.erase(lists.begin()); // 删除已经合并完的子链表 lists.erase(lists.begin()); lists.push_back(result); // 将合并链表加进vector中,等待下一次合并 } return *(lists.begin()); } ListNode* merge2Lists(ListNode* l, ListNode* r) { /* 返回值是需要加进合并链表的节点 */ if (l == NULL) { return r; } if (r == NULL) { return l; } if (l->val >= r->val) { r->next = merge2Lists(l, r->next); return r; } else { l->next = merge2Lists(l->next, r); return l; } } };
相关文章推荐
- [leetcode] Merge Two Sorted Lists
- leetcode笔记:Merge Two Sorted Lists
- Merge k Sorted Lists Leetcode Java
- LeetCode: Merge k Sorted Lists 解题报告
- 【leetcode】merge-two-sorted-lists
- LeetCode Merge k Sorted Lists(有序单链表数组的合并)
- LeetCode:Merge Two Sorted Lists
- 【leetcode】Merge Two Sorted Lists
- (LeetCode 21)Merge Two Sorted Lists
- leetcode-21 Merge Two Sorted Lists
- [Leetcode]Merge Two Sorted Lists
- leetcode -- Merge k Sorted Lists -- 重点有trick
- leetcode 23. Merge k Sorted Lists
- LeetCode_Linked List_Merge Two Sorted Lists
- 【LeetCode】Merge k Sorted Lists
- Leetcode 线性表 Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists
- LeetCode 023 Merge k Sorted Lists
- Leetcode 23. Merge k Sorted Lists
- 【LeetCode21】【Merge Two Sorted Lists】递归实现