Merge k Sorted Lists

用类似归并排序的方式来实现。

先把Lists折半分成两部分,分别对左右两部分递归调用原函数,得到两个ListNode后,按照mergeTwoLists的思路,将两个有序list合并成一个有序的list。

递归的终止条件有两个,如果Lists.size()=0,返回null,如果size==1,则返回list.get(0)。

mergeTwoLists的思路,与合并两个有序数组类似,也需要额外的空间。

必须要注意的是,要首先构造新的链表头节点,最终返回的是头节点。

public ListNode mergeKLists(ArrayList lists) {
        int len = lists.size();
        if(len==0){
            return null;
        }
        if(len==1){
            return lists.get(0);
        }
        int middle=len/2;
        ArrayList left = new ArrayList();
        for(int i=0;i right = new ArrayList();
        for(int i=middle;i

以上合并有序链表空间复杂度是O(N), mergeTwoLists有空间复杂度为O(1)的方法,可以参考一下。

你可能感兴趣的:(算法数据结构)