/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
int size = lists.size();//获取链表集合的长度,即链表的个数
if(size == 0 ){//如果链表的个数为0,返回空指针;
return null;
}
if(size == 1){//如果链表的个数为1,返回那个链表的头指针;
return lists.get(0);
}
//如果链表的个数为大于1,
ListNode head = lists.get(0);
for(int i=0;i<size-1;i++){//遍历链表集合,调用方法接口,合并两个链表
head = Merge(head,lists.get(i+1));
}
return head; //返回合并后的链表头节点
}
public static ListNode Merge(ListNode list1,ListNode list2) {
//特殊值处理,list1为空,返回链表2的头节点
if(list1 == null){
return list2;
}
//特殊值处理,list2为空,返回链表1的头节点
if(list2 == null){
return list1;
}
ListNode head = null;//合并后的链表头节点
//初始化头节点
if(list1.val <= list2.val){
head = list1;
list1 = list1.next;
}else {
head = list2;
list2 = list2.next;
}
ListNode head0 = head;//初始化合并后的链表的尾节点
while (list1 != null && list2 != null){//当链表1和链表2都不为空时,比较两个链表的最小值
if(list1.val <= list2.val){//链表1的最小值小于链表2的最小值
head0.next = list1; //合并后的链表的尾节点指向链表1的头节点
head0 = head0.next; //更新合并后的链表的尾节点
list1 = list1.next; //更新链表1的头节点
}else {
head0.next = list2; //合并后的链表的尾节点指向链表2的头节点
head0 = head0.next; //更新合并后的链表的尾节点
list2 = list2.next; //更新链表2的头节点
}
}
if(list1!=null){//当链表1不为空时,合并后的链表的尾节点指向链表1的头节点
head0.next = list1;
}
if(list2!=null){//当链链表2不为空时,合并后的链表的尾节点指向链表2的头节点
head0.next = list2;
}
return head;//返回合并后的链表的头节点
}
}