leetcode解题之23.Merge k Sorted Lists Java版本(合并k个有序的链表)
2017-04-07 10:32
645 查看
23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.合并k个有序的链表
归并排序参考
合并两个有序的链表参考
public ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 0) return null; return MSort(lists, 0, lists.length - 1); } public ListNode MSort(ListNode[] lists, int low, int high) { if (low < high) { int mid = (low + high) / 2; ListNode leftlist = MSort(lists, low, mid); ListNode rightlist = MSort(lists, mid + 1, high); return mergeTwoLists(leftlist, rightlist); } // 如果相等,只有一个元素,返回即可 return lists[low]; } // 递归合并链表 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode res = null; if (l1 == null) return l2; if (l2 == null) return l1; if (l1.val <= l2.val) { res = l1; l1.next = mergeTwoLists(l1.next, l2); } else { res = l2; l2.next = mergeTwoLists(l1, l2.next); } return res; }
使用小顶堆
public ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 0) return null; // PriorityQueue 是堆,默认小顶堆 PriorityQueue<ListNode> min = new PriorityQueue<ListNode>(11, new Comparator<ListNode>() { @Override public int compare(ListNode o1, ListNode o2) { return o1.val - o2.val; } }); // 加入所有链表的第一个结点,非空 for (ListNode node : lists) if (node != null) min.offer(node); ListNode head = new ListNode(0); ListNode cur = head; while (!min.isEmpty()) { ListNode temp = min.poll(); cur.next = temp; cur = cur.next; // 边取边加入 if (temp.next != null) min.offer(temp.next); } // 注意断链 cur.next = null; return head.next; }
相关文章推荐
- [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
- [LeetCode23]Merge k Sorted Lists(合并k个有序链表)
- leetcode_效率题解_23. Merge k Sorted Lists(合并k个有序链表)
- Leet Code 23 Merge k Sorted Lists - 合并K个有序链表 Java
- LeetCode 23 Merge k Sorted Lists(合并k个有序链表)
- leetcode23 合并K个元素的有序链表
- leetCode 23. Merge k Sorted Lists (合并k个排序链表) 解题思路和方法
- 合并K个有序链表(LeetCode:Merge k Sorted Lists)
- Merge k Sorted Lists 合并k个有序链表@LeetCode
- LeetCodet题解--23. Merge k Sorted Lists(合并K个已排序的链表)
- LeetCode 23. Merge k Sorted Lists(合并k个有序单链表)
- LeetCode 23.Merge k Sorted List 合并k个有序链表(后补)
- Leetcode 23. Merge k Sorted Lists合并k个排序链表
- LeetCode 23 Merge k Sorted Lists(合并K个已排序链表)
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
- LeetCode-Merge k Sorted Lists-合并k个排序链表-自底向上归并排序+链表操作
- leetCode 25.Reverse Nodes in k-Group (以k个节点为一组反转链表) 解题思路和方法
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表头文件C语言
- 【LeetCode-面试算法经典-Java实现】【023-Merge k Sorted Lists(合并k个排好的的单链表)】
- leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法