算法系列——合并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个升序链表的主要内容,如果未能解决你的问题,请参考以下文章

算法系列——合并K个升序链表

算法系列——合并K个升序链表

算法leetcode|23. 合并K个升序链表(rust重拳出击)

算法leetcode|23. 合并K个升序链表(rust重拳出击)

数据结构与算法之深入解析“合并K个升序链表”的求解思路与算法示例

打卡算法23合并K个升序链表 算法解析