题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
一 思路一 最笨方法
- 将所有节点添加到一个数组中
- 对数组中的节点从小到大进行排序
- 从数组中从小到大依次取出节点,串成链表
图解
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
以下资料在群文件可自行下载!
- 核心代码如下
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 构造三个链表
LinkNode *k1 = [[LinkNode alloc] initWithPrev:nil element:@(1) next:nil];
LinkNode *k2 = [[LinkNode alloc] initWithPrev:k1 element:@(4) next:nil];
LinkNode *k3 = [[LinkNode alloc] initWithPrev:k2 element:@(7) next:nil];
LinkNode *k4 = [[LinkNode alloc] initWithPrev:nil element:@(2) next:nil];
LinkNode *k5 = [[LinkNode alloc] initWithPrev:k4 element:@(5) next:nil];
LinkNode *k6 = [[LinkNode alloc] initWithPrev:k5 element:@(8) next:nil];
LinkNode *k7 = [[LinkNode alloc] initWithPrev:nil element:@(3) next:nil];
LinkNode *k8 = [[LinkNode alloc] initWithPrev:k7 element:@(6) next:nil];
LinkNode *k9 = [[LinkNode alloc] initWithPrev:k8 element:@(9) next:nil];
// 方法一
NSArray *linkNodes = @[k1,k4,k7];
LinkNode *k = [self mergeManyLists:linkNodes];
while (k) {
NSLog(@"%@",[k description]);
k = k.next;
}
}
/// 方法一:合并N个有序链表
- (LinkNode *)mergeManyLists:(NSArray *)linkNodes {
if (!linkNodes || linkNodes.count == 0) {
return