package io.github.dunwu.algorithm.list; import org.junit.jupiter.api.Assertions; import java.util.List; /** * @author <a href="mailto:[email protected]">Zhang Peng</a> * @since 2020-06-09 */ public class 合并K个排序链表解法2 { public static void main(String[] args) { ListNode head1 = ListUtil.buildList(1, 4, 5); ListNode head2 = ListUtil.buildList(1, 3, 4); ListNode head3 = ListUtil.buildList(2, 6); ListNode[] array = new ListNode[] { head1, head2, head3 }; ListNode result = mergeKLists(array); List<Integer> list = ListUtil.toList(result); System.out.println(list); Assertions.assertArrayEquals(new Integer[] { 1, 1, 2, 3, 4, 4, 5, 6 }, list.toArray(new Integer[0])); } /** * <code>23. 合并K个排序链表</code> 算法实现 * <p> * 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 * <p> * 示例: * <pre> * 输入: * [ * 1->4->5, * 1->3->4, * 2->6 * ] * 输出: 1->1->2->3->4->4->5->6 * </pre> * * @see <a href="https://leetcode-cn.com/problems/merge-k-sorted-lists/">23. 合并K个排序链表</a> */ public static ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 1) { return lists[0]; } ListNode result = lists[0]; for (int i = 1; i < lists.length; i++) { result = 合并两个有序链表.mergeTwoLists(result, lists[i]); } return result; } }