Saturday, March 20, 2021

Merge k Sorted Lists

You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.

Merge all the linked-lists into one sorted linked-list and return it.

Example 1:

Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
  1->4->5,
  1->3->4,
  2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6

Example 2:

Input: lists = []
Output: []

Example 3:

Input: lists = [[]]
Output: []
Solution:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

        ListNode head = new ListNode(0);

        ListNode result=head;

        while (l1 != null && l2 != null) {

            if (l1.val < l2.val) {

                head.next = l1;

                l1 = l1.next;

            } else {

                head.next = l2;                

                l2 = l2.next;

            }

            head = head.next;

        }

        if(l1!=null){

            head.next=l1;

        }

        if(l2!=null){

            head.next=l2;

        } 

        return result.next;

    }

    

    public ListNode mergeKLists(ListNode[] lists) {        

        if(lists.length==0){

            return null;

        }

        if(lists.length==1){

            return lists[0];

        }

        ListNode head = mergeTwoLists(lists[0], lists[1]);

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

            head = mergeTwoLists(head, lists[i]);

        }

        return head;

    }

No comments:

Post a Comment