您现在的位置是:亿华云 > 应用开发
leetcode23. 合并K个排序链表
亿华云2025-10-05 16:44:29【应用开发】5人已围观
简介1. 题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出:1->1->
1. 题目描述
合并 k 个排序链表,合并返回合并后的排序排序链表。请分析和描述算法的链表复杂度。示例:输入:[1->4->5,合并1->3->4,2->6]输出:1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-k-sorted-lists2. 解题思路
/*解题思路:解法一、云服务器顺序合并1、排序lists[0]与lists[1]合并,链表结果与lists[2]合并...结果与lists[listsSize-1]合并解法二、合并分治合并1、排序lists[0]与lists[1]合并,链表lists[2]与lists[3]合并,然后将合并的源码下载结果继续合并。*/3. 测试结果
解法一、合并顺序合并

解法二、排序分治合并

4. 顺序合并
/*title: leetcode23. 合并K个排序链表author: xidoublestarmethod: 顺序合并type: Cdate: 2020-5-27*/structListNode* mergeTwoLists(structListNode* l1,链表structListNode* l2){ if(!l1)return l2;if(!l2)return l1;structListNode* head =(structListNode*)malloc(sizeof(structListNode)),* tail = head;while(l1 && l2){ if(l1->val < l2->val){ tail->next = l1; l1 = l1->next;}else{ tail->next = l2; l2 = l2->next;} tail = tail->next;}if(l1) tail->next = l1;elseif(l2) tail->next = l2; tail = head; head = head->next; free(tail);return head;}structListNode* mergeKLists(structListNode** lists,int listsSize){ if(listsSize ==0)return NULL;structListNode* res =*lists;for(int i =1; i < listsSize; i++){ if(lists[i]!= NULL) res = mergeTwoLists(res, lists[i]);}return res;}5. 分治合并
/*title: leetcode23. 合并K个排序链表author: xidoublestarmethod: 顺序合并type: Cdate: 2020-5-27*/structListNode* mergeTwoLists(structListNode* l1,structListNode* l2){ if((!l1)||(!l2))return l1 ? l1 : l2;structListNode head; head.next = NULL;structListNode* tail =&head;while(l1 && l2){ if(l1->val < l2->val){ tail->next = l1; l1 = l1->next;}else{ tail->next = l2; l2 = l2->next;} tail = tail->next;} tail->next = l1 ? l1 : l2;return head.next;}structListNode* merge(structListNode** lists,int left,int right){ if(left == right)return lists[left];if(left > right)return NULL;int mid =(left + right)>>1;structListNode* p1 = merge(lists, left, mid);structListNode* p2 = merge(lists, mid +1, right);return mergeTwoLists(p1, p2);}structListNode* mergeKLists(structListNode** lists,int listsSize){ if(listsSize ==0)return NULL;return merge(lists,0, listsSize -1);}6. 复杂度分析
解法一、顺序合并
时间复杂度:O(n*n)
空间复杂度:O(1)
解法二、网站模板合并分治合并
排序时间复杂度:O(nlogn)
排序空间复杂度:O(1)很赞哦!(7)
相关文章
- .com域名是国际最广泛流行的通用域名,目前全球注册量第一的域名,公司企业注册域名的首选。国际化公司通常会注册该类域名。
- Go 如何实现启动参数的加载
- 突破常规,脱颖而出:STEM企业如何利用域名打造数字优势?
- 太漂亮了 ! 输出好看的表格,就用这个 Python 库!
- ④注册门槛低
- 域名和网站的有怎样的关系?
- Kafka如何修改分区Leader
- 身为前端开发者,你不能不知道的 Runtime Performance Debug 技巧
- 付款完成后,您只需耐心等待,如果您注册成功,系统会提示您。这里需要注意的是,域名是一个即时产品,只有在最终付款成功时才能预订,注册成功后不能更改。
- 抽丝剥茧—千万级数据之SQL优化