1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public class Solution { public ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 0) { return null; }
List<ListNode> listNodes = new ArrayList<>(); for (ListNode node : lists) { listNodes.add(node); }
while (listNodes.size() > 1) { List<ListNode> mergedLists = new ArrayList<>(); for (int i = 0; i < listNodes.size(); i += 2) { ListNode l1 = listNodes.get(i); ListNode l2 = (i + 1) < listNodes.size() ? listNodes.get(i + 1) : null; mergedLists.add(mergeList(l1, l2)); } listNodes=mergedLists; } return listNodes.get(0); }
private ListNode mergeList(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(); ListNode tail = dummy;
while (l1 != null && l2 != null) { if (l1.val < l2.val) { tail.next = l1; l1 = l1.next; } else { tail.next = l2; l2 = l2.next; } tail = tail.next; } if (l1 != null) { tail.next = l1; } if (l2 != null) { tail.next = l2; } return dummy.next; } }
|