【LeetCode】Merge k Sorted Lists
来源:互联网 发布:nba球员数据统计 编辑:程序博客网 时间:2024/06/14 03:21
//总是Limited Time
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2){if (l1 == NULL)return l2;if (l2 == NULL)return;1;ListNode *fakehead = new ListNode(0);ListNode *cur;cur = fakehead;while (l1 && l2){if (l1->val < l2->val){cur->next = l1;cur = l1;l1 = l1->next;}else{cur->next = l2;cur = l2;l2 = l2->next;}}if (l1){cur->next = l1;}else if (l2){cur->next = l2;}return fakehead->next;}//6.3 Merge k Sorted ListsListNode *mergeKLists(vector<ListNode *> &lists){if (lists.size() == 0)return NULL;ListNode *tmp = lists[0];for (int i = 1; i < lists.size(); i++){tmp = mergeTwoLists(tmp, lists[i]);}return tmp;}
//从网上参考了一份/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };思路是:首先将k个链表的第一个节点集合,建堆,然后取出堆顶的节点,链接到结果链表上,然后将该节点的下一个节点入堆,直到所有链表都已经完成;下面的Node结构体好像根本无必要,刚开始没注意是链表(而链表可以很方便的获取下一个节点,如果是数组的话还得记录它来自哪个数组);有亮点需要注意:1.当一条链表结束的时候,添加值为INF的新Node加入堆,可以方便地避免NULL的判断;2.make_heap()默认是大顶堆,所以要显示指定使用greater<node>(),来获取小顶堆; */ #define LN ListNode*#define HEAP heap.begin(),heap.end()#define PB push_back#define INF 1000000struct node{int val;LN from;node(ListNode* n){if ( n==NULL ){val=INF;}else{val=n->val;}from=n;}bool operator<(const node& other)const{return val<other.val;}bool operator>(const node& other)const{return val>other.val;}}; class Solution {public: ListNode *mergeKLists(vector<ListNode *> &lists) { // Start typing your C/C++ solution below // DO NOT write int main() function if (lists.empty()) return NULL;int n= lists.size();vector<node> heap;heap.reserve(n);for( int i=0;i<n;i++)heap.PB(node(lists[i]));make_heap(HEAP,greater<node>());LN head= new ListNode(0);LN pL = head;pop_heap(HEAP,greater<node>());node small=heap.back();heap.pop_back();while(small.val!=INF){LN next=small.from->next;pL->next=small.from;small.from->next=NULL;pL=pL->next;heap.PB(node(next));push_heap(HEAP,greater<node>());pop_heap(HEAP,greater<node>());small=heap.back();heap.pop_back();}LN ret=head->next;delete head;return ret; }};
0 0
- LeetCode: Merge k Sorted Lists
- LeetCode Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge K sorted lists
- [LeetCode]Merge k Sorted Lists
- [LeetCode] Merge k Sorted Lists
- LeetCode-Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- LeetCode - Merge k Sorted Lists
- LeetCode | Merge k Sorted Lists
- 【leetcode】Merge k Sorted Lists
- Leetcode: Merge k Sorted Lists
- <Leetcode>Merge k Sorted Lists
- [LeetCode] Merge K sorted lists
- [LeetCode] Merge k Sorted Lists
- 【Leetcode】Merge k Sorted Lists
- 前端经验
- SQL精编1
- CSDN 四川大学线下编程比赛第一题:数字填充
- Elasticsearch常见问题收集
- KMP模板
- 【LeetCode】Merge k Sorted Lists
- 一个不错的Git教程
- 配置Andoid开发环境与配置PhoneGap开发环境
- JAVA设计模式-从抽象与实现说桥接模式
- ANT打包报MalformedByteSequenceException: 3 字节的 UTF-8 序列的的原因
- Unix 网络编程 dup和dup2函数
- poj 1988 Cube Stacking 并查集的应用
- poj 1830 开关问题 高斯消元
- CubieTruck安装Cubian X1