题目
思路
合并链表,需要一个合并方法,由因为是两两合并,因此可以通过分治法将链表拆分成两个为一组的形式
代码
public ListNode mergeKLists(ListNode[] lists) {int len = lists.length;if (len == 0) return null;if (len == 1) return lists[0];return recur(lists, 0, len - 1);}public ListNode recur(ListNode[] lists, int left, int right) {if (left == right) return lists[left];if (right - left + 1 == 2) return merge(lists[left], lists[right]);ListNode l = recur(lists, left, (left + right) / 2);ListNode r = recur(lists, (left + right) / 2 + 1, right);return merge(l, r);}public ListNode merge(ListNode p1, ListNode p2) {ListNode dummy = new ListNode(0);ListNode cur = dummy;while (p1 != null && p2 != null) {if (p1.val > p2.val) {cur.next = p2;p2 = p2.next;} else {cur.next = p1;p1 = p1.next;}cur = cur.next;}ListNode p = p1 == null ? p2 : p1;cur.next = p;return dummy.next;}
