题解 | #合并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类 */ private ListNode merge(ListNode pHead, ListNode qHead) { ListNode dummy = new ListNode(-1), i = pHead, j = qHead, pre = dummy; while(i != null && j != null) { if(i.val > j.val) { pre.next = j; j = j.next; } else { pre.next = i; i = i.next; } pre = pre.next; } if(i != null) pre.next = i; if(j != null) pre.next = j; return dummy.next; } public ListNode mergeKLists (ArrayList<ListNode> lists) { // write code here if(lists.size() == 0) return null; if(lists.size() == 1) return lists.get(0); if(lists.size() == 2) return merge(lists.get(0), lists.get(1)); int len = lists.size(), mid = len >> 2; ArrayList<ListNode> arr = new ArrayList(); ArrayList<ListNode> arr1 = new ArrayList(); ArrayList<ListNode> res = new ArrayList(); arr.addAll(lists.subList(0, mid+1)); arr1.addAll(lists.subList(mid+1, len)); res.add(mergeKLists(arr)); res.add(mergeKLists(arr1)); return mergeKLists(res); } }
归并排序嘛