题目描述

题解
// 这个题是【Leetcode】21. 合并两个有序链表 的升级版嘛。
// 乍一看很吓人,实际上会写两链表合并的话,弄个for循环连续合并lists中的链表
// ,最终不就把多个链表合并了嘛。
// 构建两个有序链表合并函数mergeTwoList,写法同21题。
// 构建答案保存链表res初始化为null,for循环遍历lists中所有链表记为lists[i],
// 然后循环合并res和lists[i],将结果赋给res,最后返回res即可。
//
// 执行用时:130 ms, 在所有 Java 提交中击败了17.33%的用户
// 内存消耗:40.1 MB, 在所有 Java 提交中击败了62.47%的用户
/**
* Definition for singly-linked list.
* public class ListNode {
* int val
* ListNode next
* ListNode() {}
* ListNode(int val) { this.val = val
* ListNode(int val, ListNode next) { this.val = val
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode res = null
for (int i = 0
res = mergeTwoList(res, lists[i])
}
return res
}
private ListNode mergeTwoList(ListNode l1, ListNode l2) {
if (l1 == null)
return l2
else if (l2 == null)
return l1
ListNode temp = new ListNode(0)
ListNode dummy
if (l1.val <= l2.val) dummy = l1
else dummy = l2
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
while (l1.next != null && l1.next.val <= l2.val)
l1 = l1.next
temp = l1
l1 = l1.next
temp.next = l2
}
else {
while (l2.next != null && l1.val > l2.next.val)
l2 = l2.next
temp = l2
l2 = l2.next
temp.next = l1
}
}
return dummy
}
}