题解 | #合并k个已排序的链表# 归并排序
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类ArrayList * @return ListNode类 */ public ListNode mergeKLists (ArrayList<ListNode> lists) { if (lists.isEmpty()) { return null; } if (lists.size() == 1) { return lists.get(0); } int size = lists.size(); int leftSize = size / 2; int rightSize = size - leftSize; ArrayList<ListNode> leftPart = new ArrayList<>(); ArrayList<ListNode> rightPart = new ArrayList<>(); for (int i = 0; i < leftSize; i++) { leftPart.add(lists.get(i)); } for (int i = leftSize; i < size; i++) { rightPart.add(lists.get(i)); } ListNode leftRes = mergeKLists(leftPart); ListNode rightRes = mergeKLists(rightPart); ListNode hair = new ListNode(0); ListNode pointer = hair; while (leftRes != null || rightRes != null) { if (leftRes == null) { pointer.next = rightRes; return hair.next; } else if (rightRes == null) { pointer.next = leftRes; return hair.next; } else if (leftRes.val < rightRes.val) { pointer.next = leftRes; leftRes = leftRes.next; } else { pointer.next = rightRes; rightRes = rightRes.next; } pointer = pointer.next; } return hair.next; } }