给你一个链表数组 lists,每个链表都已经按升序排列。
请将所有链表合并成一个升序链表,并返回合并后的链表。
例如:
补充约束:
k 为链表数组 lists 的长度。这题可以看作是“合并两个有序链表”的扩展。直接把每条链表依次合并到结果中,最坏情况下会重复遍历大量节点;更合适的做法是使用分治:
k 条链表两两合并,得到约 k / 2 条链表。O(log k) 轮。合并两条链表时直接复用原节点,不需要创建新的节点。使用哨兵节点可以统一处理结果链表为空以及头节点连接等边界情况。
设所有链表共有 n 个节点,链表数量为 k:
O(n log k),每一轮合并都会遍历全部节点,共 log k 轮。O(k),每一轮使用临时数组保存合并后的链表;合并节点本身没有额外创建。lists 为空时,直接返回 null。lists 中包含空链表时,合并函数会自动跳过空链表。list1,但这不影响最终结果的有序性。