原题链接
讨论澄清
此题是在合并两条链表的基础上,扩展成多条链表的,因此我们就应该将他再次细分成两条链表的合并的思路来处理,再将K条链表分解成两条两条链表的合并这个过程要利用分治的思想。
思路简述
注意事项
具体代码
class Solution {/**结合昨天的合并两个链表的方法,对链表进行分治,利用递归的方法转化为两个两个链表的合并*/public ListNode mergeKLists(ListNode[] lists) {return merge(lists, 0, lists.length - 1);}public ListNode merge(ListNode[] list,int begin,int end){//如果数组中只有一组链表 那么就只返回一组数据if(begin==end){return list[begin];}//元素为空则返回空if(begin>end){return null;}//两组数据以上的情况,进行分治、两组两组的合并int mid = (begin+end)/2;return mergeTwoLists(merge(list,begin,mid),merge(list,mid+1,end));}//两组合并的方法完全照抄昨天的题解:合并两个有序链表的代码public ListNode mergeTwoLists(ListNode l1,ListNode l2){ListNode dummyhead = new ListNode();ListNode newnode = new ListNode();dummyhead = newnode;while(l1!=null&&l2!=null){if(l1.val<=l2.val){newnode.next = l1;l1 = l1.next;}else{newnode.next = l2;l2 = l2.next;}newnode = newnode.next;}//如果链表l1先合并完,那么就把l2剩余的节点接在合并的链表末尾if(l1==null){newnode.next = l2;while(l2!=null){newnode = newnode.next;l2 = l2.next;}}//如果链表l2先合并完,那么就把剩余的节点接在合并的链表末尾if(l2==null){newnode.next = l1;while(l1!=null){newnode = newnode.next;l1 = l1.next;}}return dummyhead.next;}}
