当前位置:网站首页>每日一题-合并K个升序链表-0722
每日一题-合并K个升序链表-0722
2022-08-05 05:17:00 【菜鸡程序媛】
题目
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
思路
- 采用归并排序的思路,先进行拆解到最小的单位,拆到不能再拆
- 然后再合并,合并成最终的链表
代码
public ListNode mergeKLists(ListNode[] lists) {
if(lists == null || lists.length <= 0)
return null;
return merge(lists, 0, lists.length - 1);
}
private ListNode merge(ListNode[] lists, int left, int right){
if(left == right)
return lists[left];
int mid = left + (right - left) / 2;
//为什么不是left,mid-1和mid,right呢,因为mid取得就是floor(value),如果-1的话,容易造出左侧越界
//拆解到最小的单位
ListNode l1 = merge(lists, left, mid);
ListNode l2 = merge(lists, mid + 1, right);
//进行合并,归并成最终的链表
return mergeTwoLists(l1, l2);
}
private ListNode mergeTwoLists(ListNode l1, ListNode l2){
if(l1 == null)
return l2;
if(l2 == null)
return l1;
if(l1.val < l2.val){
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}else{
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
边栏推荐
猜你喜欢
随机推荐
《基于机器视觉的输电线路交叉点在线测量方法及技术方案》论文笔记
网络ID,广播地址,掩码位数计算
[Database and SQL study notes] 8. Views in SQL
LeetCode刷题之第24题
1004 成绩排名 (20 分)
LeetCode刷题之第54题
LeetCode刷题之第1024题
电子产品量产工具(2)- 输入系统实现
读论文 - Unpaired Portrait Drawing Generation via Asymmetric Cycle Mapping
LeetCode刷题之第33题
MaskDistill - Semantic segmentation without labeled data
Leetcode刷题——对链表进行插入排序
常用 crud 的思考和设计
1008 数组元素循环右移问题 (20 分)
物联网:LoRa无线通信技术
伪RTOS-ProroThread在CH573芯片上的移植
(C语言)动态内存管理
ACL 的一点心得
二、自动配置之底层注解
手把手教你搭建小程序









