LeetCode算法题——23. Merge k Sorted Lists
来源:互联网 发布:房产证生成软件 编辑:程序博客网 时间:2024/05/16 17:11
题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Subscribe to see which companies asked this question.
算法思想:
针对K个排序的链表进行两两合并,合并成新的有序的链表,将合成的新的链表与剩下的K-2个中拿出一个进行合并,依次进行,直到将所有链表合并,在进行两个链表合并时,可以采用将其中一个链表插入的到另一个链表中,也可以生成一个新的链表,将两个链表依次插入到新的链表,在用一个链表插入到另一个链表中时需要考虑在头结点之前插入的问题,因此不能采用传址的形式,而是需要采用传值的形式,因为新合并的链表的首地址有可能不是其中任何一个链表的地址。
另外,还需要考虑取得的链表为空的情况。
C++实现:
#include <iostream>#include <vector>#include "stdlib.h"using namespace std;// * 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.size()==0){ return NULL; }else{ int j=0; ListNode* res; while(j<lists.size()&&lists[j]==NULL){ j++; } if(j==lists.size()){ return NULL; }else{ res=lists[j]; for(int i=j+1;i<lists.size();i++){ res=mergeTwoLists(res,lists[i]); }return res; } } } ListNode* mergeTwoLists(ListNode* res,ListNode* listElemt){ ListNode *resTemp,*q; resTemp=res; while(listElemt!=NULL){ resTemp=res; int v=listElemt->val;q=(ListNode *)malloc(sizeof(ListNode));q->val=v; if(v<res->val){ q->next=resTemp;res=q; }else{ while(resTemp->next!=NULL&&resTemp->next->val<v){ resTemp=resTemp->next; } q->next=resTemp->next; resTemp->next=q; } listElemt=listElemt->next; } return res; }};int main(){ListNode *l1h,*p1,*p2,*l2h,*q1,*q2,*res; p1=NULL; l1h=NULL; q1=NULL; l2h=NULL; int n,t,m,s; cout<<"please input the first List element number:"; cin>>n; for(int i=0;i<n;i++){ p2=(ListNode *)malloc(sizeof(ListNode)); cin>>t; p2->val=t; p2->next=NULL; if(l1h==NULL){ l1h=p1=p2; }else{ p1->next=p2; p1=p1->next; } } cout<<"please input the second List element number:"; cin>>m; for(int i=0;i<m;i++){ q2=(ListNode *)malloc(sizeof(ListNode)); cin>>s; q2->val=s; q2->next=NULL; if(l2h==NULL){ l2h=q1=q2; }else{ q1->next=q2; q1=q1->next; } } vector<ListNode*> lists; lists.push_back(l1h); lists.push_back(l2h);Solution sol; res=sol.mergeKLists(lists); while(res!=NULL){ cout<<res->val<<" "; res=res->next; }return 0;}
0 0
- LeetCode算法题——23. Merge k Sorted Lists
- python写算法题:leetcode: 23. Merge k Sorted Lists
- LeetCode——Merge k Sorted Lists
- LeetCode——Merge k Sorted Lists
- leetcode第23题——***Merge k Sorted Lists
- LeetCode算法题目:Merge k Sorted Lists
- 每周LeetCode算法题(四):Merge k Sorted Lists
- leetcode 23. LeetCode Merge k Sorted Lists
- Algorithms—23.Merge k Sorted Lists
- LeetCode算法题——21. Merge Two 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
- redis-helloWorld
- 线程与进程的区别
- 将1,2,3,4,5,6,7,8,9九个数字分成以下三种形式之一,每个数字只能用一次,使得该分数刚好为一个整数
- C语言程序设计(2)
- php 导出mysql
- LeetCode算法题——23. Merge k Sorted Lists
- Elasticsearch(七)-分布式搜索
- 代码中手动添加调用库
- Linux:Valgrind使用
- 记录开发中遇到的坑(华为手机获取拍照权限后拍照,返回值为空)!
- org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representatio
- 解读EXPLAIN执行计划中的key_len
- CentOS7 ping通 telnet不通
- 在html中显示本地图片