给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
- /**
- * 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 static void main(String[] args) {
- ListNode[] lists = new ListNode[3];
- lists[0] = new ListNode(1);
- lists[0].add(4);
- lists[0].add(5);
- lists[1] = new ListNode(1);
- lists[1].add(3);
- lists[1].add(4);
- lists[2] = new ListNode(2);
- lists[2].add(2);
- lists[2].add(6);
- ListNode res = mergeKLists(lists);
- }*/
-
- public static ListNode mergeKLists(ListNode[] lists) {
- ListNode headNode = new ListNode();
- ListNode curNode = headNode;
- int len = lists.length;
- if (len == 0) {
- return null;
- }
- if (!len1(lists)) {
- return null;
- }
- for (int i = 0; i < len; i = (i + 1) % len) {
- if (!len1(lists)) {
- return headNode.next;
- }
- int index = min1(lists);
- ListNode newNode = new ListNode();
- newNode.val = lists[index].val;
- lists[index] = lists[index].next;
- curNode.next = newNode;
- curNode = newNode;
- }
- return headNode.next;
- }
-
- private static int min1(ListNode[] lists) {
- int i = 0;
- while (lists[i] == null) {
- i++;
- }
- for (int j = i + 1; j < lists.length; j++) {
- while (j < lists.length && lists[j] == null) {
- j++;
- }
- if (j < lists.length && lists[j].val < lists[i].val) {
- i = j;
- }
- }
- return i;
- }
-
- private static boolean len1(ListNode[] lists) {
- for (int i = 0; i < lists.length; i++) {
- if (lists[i] != null) {
- return true;
- }
- }
- return false;
- }
- }