23. Merge k Sorted Lists 2019-03-29

1.按照合并两条链表的方法依次合并k条链表

    时间复杂度O(n*(k-1))

/**

* 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.length==1){

            return lists[0];

        }

        if(lists.length==0){

            return null;

        }

        ListNode aim=new ListNode(0);

        for(int i=1;i<lists.length;i++){

            if(i==1){

                aim=merge(lists[0],lists[i]);

            }else{

                aim=merge(aim,lists[i]);

            }

        }

        return aim;


    }

    public static ListNode merge(ListNode a,ListNode b){

        ListNode head=new ListNode(0);

        head.next=a;

        ListNode p1=head,p2=a;

        ListNode q1,q2=b;

        while(p2!=null&&q2!=null){

            if(q2.val<p2.val){

                q1=q2;

                q2=q2.next;

                q1.next=p2;

                p1.next=q1;

                p1=p1.next;

            }else{

                p1=p1.next;

                p2=p2.next;

            }

        }


        if(q2!=null){

            p1.next=q2;

        }


        return head.next;

    }

}

2.还有一种方法,直接将所有链表的所有值存进1个数组中,然后进行排序,根据数组中的值重新建立一个链表。

    时间复杂度O(nlogn).

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容