- 题目描述:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

- 题目分析:该题我的思路是运用递归思想,将每个链表的头结点存储的整数值进行比较,最小的存到定义的list1节点中,然后再调用函数进行下一次比较。
- 代码展示:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists == null || lists.length == 0) {return null;}//判断数组是否为空
int m = 0;
int leng = lists.length;
ListNode list1 = new ListNode(0);//用来存储比较出来的最小节点
list1.val = lists[0].val;
//比较最小节点
for(int i = 0;i < leng;i ++) {
if(lists[i].val < list1.val) {
list1.val = lists[i].val;
m = i;
}
}
lists[m] = lists[m].next;//换到下一个节点
//若选出的最小值节点的下一节点为空即该段链表结束则将该节点删除
if(lists[m] == null && leng > 1) {
ListNode[] lists2 = new ListNode[leng - 1];
for(int k = 0;k < leng - 1;k ++) {
if(k < m)
lists2[k] = lists[k];
else
lists2[k] = lists[k + 1];
}
list1.next = mergeKLists(lists2);//通过递归进行下一次比较
}
//若选定节点的下一节点不为空则正常通过递归进行下一次比较
if(lists[m] != null)
list1.next = mergeKLists(lists);
return list1;//返回最后的结果
}
}