算法系列——合并K个升序链表
Posted BridgeGeorge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法系列——合并K个升序链表相关的知识,希望对你有一定的参考价值。
题目
题目链接:https://leetcode-cn.com/problems/merge-k-sorted-lists/
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表
思路
分治法 子问题为合并两个升序链表;
代码
/**
* 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)
return merge(lists,0,lists.length-1);
public ListNode merge(ListNode[] lists, int l, int r)
if (l == r)
return lists[l];
if (l > r)
return null;
int mid = (l + r) >> 1;
return mergeTwoLists(merge(lists, l, mid), merge(lists, mid + 1, r));
public ListNode mergeTwoLists(ListNode a, ListNode b)
if (a == null || b == null)
return a != null ? a : b;
ListNode head = new ListNode(0);
ListNode tail = head, aPtr = a, bPtr = b;
while (aPtr != null && bPtr != null)
if (aPtr.val < bPtr.val)
tail.next = aPtr;
aPtr = aPtr.next;
else
tail.next = bPtr;
bPtr = bPtr.next;
tail = tail.next;
tail.next = (aPtr != null ? aPtr : bPtr);
return head.next;
以上是关于算法系列——合并K个升序链表的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode|23. 合并K个升序链表(rust重拳出击)
算法leetcode|23. 合并K个升序链表(rust重拳出击)