/**
* 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; this.next = next; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length == 0){
return null;
}
return mergeList(lists,0,lists.length);
}
public ListNode mergeList(ListNode[] lists,int start,int end){
//设置递归出口
if(start + 1 == end){
return lists[start];
}
//分割整个链表数组分别递归
int mid = (start + end)/2;
ListNode head1 = mergeList(lists,start,mid);
ListNode head2 = mergeList(lists,mid,end);
return merge(head1,head2);
}
public ListNode merge(ListNode head1,ListNode head2){
//哨兵节点
ListNode dummy = new ListNode(0);
ListNode next = dummy;
//加入结果至有一个链表到尾
while(head1 != null && head2 != null){
if(head1.val < head2.val){
next.next = head1;
head1 = head1.next;
}else{
next.next = head2;
head2 = head2.next;
}
next = next.next;
}
//加入剩下的节点
next.next = head1 == null ? head2 : head1;
//返回结果
return dummy.next;
}
}
合并排序链表java实现
最新推荐文章于 2024-04-25 00:13:48 发布