leetcode 23. Merge k Sorted Lists
来源:互联网 发布:广义线性模型 知乎 编辑:程序博客网 时间:2024/06/09 14:58
题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
合并k个排好序的的链,并且返回一个有序链。
方法一:
想到21题是合并两个排好序的链,那么这个题可以借鉴思想。
每次从数组中取两个链表,将合并结果加入到链表中,反复这个过程,直到数组中只剩一个链表为止,对两个链表进行合并的代码可以复用LeetCode21的代码。
/** * 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) { //lists的长度 int length = lists.size(); if(length==0) return NULL; while(lists.size()>1) { ListNode *p,*q; p=lists.front(); lists.erase(lists.begin()); q=lists.front(); lists.erase(lists.begin()); lists.push_back(merge2Lists(p,q)); } return lists[0]; } //根据leetcode 21题的,合并两个排好序的链的方法思路合并 ListNode * merge2Lists(ListNode * p , ListNode * q) { if(p==NULL) return q; if(q==NULL) return p; ListNode *t1,*t2,*head,*tail; t1=p; t2=q; if(p->val < q->val) { head=p; t1=t1->next; tail=p; } else { head=q; t2=t2->next; tail=q; } while(t1!=NULL && t2!=NULL) { if(t1->val<t2->val) { tail->next=t1; t1=t1->next; } else { tail->next=t2; t2=t2->next; } tail=tail->next; } if(t1==NULL) tail->next=t2; else tail->next=t1; return head; }}; // 创建链表ListNode* CreateList(int A[],int n){ ListNode *head = NULL; if(n <= 0){ return head; } head = new ListNode(A[0]); ListNode *p1 = head; for(int i = 1;i < n;i++){ ListNode *node = new ListNode(A[i]); p1->next = node; p1 = node; } return head;}int main() { Solution solution; vector<ListNode *> vecs; int A[] = {1,2,4,7,9}; int B[] = {3,5,8,10,11,12}; int C[] = {6,10,13}; int D[] = {15,16,17,23}; ListNode* head1 = CreateList(A,5); ListNode* head2 = CreateList(B,6); ListNode* head3 = CreateList(C,3); ListNode* head4 = CreateList(D,4); vecs.push_back(head1); vecs.push_back(head2); vecs.push_back(head3); vecs.push_back(head4); ListNode *head = solution.mergeKLists(vecs); // 输出 ListNode *p = head; while(p){ cout<<p->val<<" "; p = p->next; }}<span style="white-space:pre"></span>
利用堆排序的思想。
参考他的博客:http://www.cnblogs.com/skysand/p/4300711.html
0 0
- leetcode 23. LeetCode Merge k Sorted Lists
- [LeetCode]23.Merge k Sorted Lists
- LeetCode --- 23. Merge k Sorted Lists
- LeetCode 23.Merge k Sorted Lists
- [Leetcode] 23. Merge k Sorted Lists
- 【LeetCode】23.Merge k Sorted Lists
- [leetcode] 23.Merge k Sorted Lists
- Leetcode-23.Merge k Sorted Lists
- [Leetcode]23. Merge k Sorted Lists @python
- leetcode 23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- [leetcode] 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- LeetCode-23.Merge k Sorted Lists
- Leetcode 23. Merge k Sorted Lists
- iOS监听UITabBar的Tab点击事件
- 恢复误删的记录
- 给一个类成员变量struct赋值.
- poi 读取excel
- 不生成导入表调用API函数
- leetcode 23. Merge k Sorted Lists
- 花生壳动态域名软件3重大版本:客户端支持微信远程管理
- 配置android app 方法数超过65k问题
- 【LQ系列】 BASIC-11~BASIC-15
- XML-schema约束
- 3.JVM线程引擎和内存共享区的交互及此背景下的程序计数器
- 练习3-N
- Git Commit Message 格式规范
- socket通过http上传下载