题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[1->4->5,1->3->4,2->6
]
输出: 1->1->2->3->4->4->5->6
解法
归并排序法
public ListNode mergeKLists(ListNode[] lists) {if(lists == null || lists.length<1) {return null;}return solve(lists, 0, lists.length-1);}private ListNode solve(ListNode[] lists, int left, int right) {if(left == right) {return lists[left];}int mid = (left +right)>>1;ListNode leftNode = solve(lists, left, mid);ListNode rightNode = solve(lists, mid+1, right);return merge(leftNode, rightNode);}private ListNode merge(ListNode left, ListNode right) {if(left == null) {return right;}if(right == null) {return left;}ListNode start = new ListNode(0), head = start;while(left != null && right != null) {if(left.val<right.val) {start.next = left;left = left.next;}else {start.next = right;right = right.next;}start = start.next;}if(left == null && right != null) {start.next = right;}else if (left!= null && right == null) {start.next = left;}return head.next;}