一、题目描述
- 给一个数组,里面有K个链表,每个链表已经升序排列,把这些链表合并成一个升序链表
二、分析
这一题很明显用归并排序就能快速解答
三、代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 0) return null; return merge_two(lists,0,lists.length-1); } private ListNode merge_two(ListNode[] list, int left, int right) { if(left==right) return list[left]; int mid = left + (right - left) / 2; ListNode l1 = merge_two(list, left, mid); ListNode l2 = merge_two(list, mid + 1, right); return merge(l1, l2); } private ListNode merge(ListNode l1,ListNode l2){ ListNode node = new ListNode(-1), h = node; while(l1 != null && l2 != null){ if(l1.val <= l2.val){ h.next = l1; l1 = l1.next; }else{ h.next = l2; l2 = l2.next; } h = h.next; } if(l1 != null){ h.next = l1; }else if(l2 != null){ h.next = l2; } return node.next; } }