23. 合并 K 个升序链表 --力扣 --JAVA

简介: 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。

 题目

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

解题思路

    1. 对每个链表的首节点进行比较,获取当前的最小节点;
    2. 将每个阶段的最小节点进行链接;

    代码展示

    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
            ListNode head = null;
            ListNode result = null;
            int count = 0;
            while (count < lists.length){
                count = 0;
                //获取首节点
                if(head == null){
                    int min = Integer.MAX_VALUE;
                    int index = 0;
                    for (int i = 0; i < lists.length; i++){
                        if(lists[i] == null){
                            count++;
                            continue;
                        }
                        int temp = lists[i].val;
                        if(temp < min){
                            min = temp;
                            head = lists[i];
                            index = i;
                        }
                    }
                    if(lists[index] != null) {
                        lists[index] = lists[index].next;
                    }
                    result = head;
                } else {
                    int min = Integer.MAX_VALUE;
                    int index = 0;
                    for (int i = 0; i < lists.length; i++){
                        if(lists[i] == null){
                            count++;
                            continue;
                        }
                        int temp = lists[i].val;
                        if(temp < min){
                            min = temp;
                            result.next = lists[i];
                            index = i;
                        }
                    }
                    if(lists[index] != null) {
                        lists[index] = lists[index].next;
                    }
                    result = result.next;
                }
            }
            return head;
        }
    }

    image.gif


    目录
    相关文章
    |
    8天前
    |
    Java
    java数据结构,双向链表的实现
    文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
    java数据结构,双向链表的实现
    |
    2月前
    |
    算法
    LeetCode第24题两两交换链表中的节点
    这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
    LeetCode第24题两两交换链表中的节点
    |
    2月前
    |
    存储 算法
    LeetCode第86题分隔链表
    文章介绍了LeetCode第86题"分隔链表"的解法,通过创建两个新链表分别存储小于和大于等于给定值x的节点,然后合并这两个链表来解决问题,提供了一种简单易懂且操作原链表的解决方案。
    LeetCode第86题分隔链表
    |
    2月前
    |
    存储 算法
    LeetCode第83题删除排序链表中的重复元素
    文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
    LeetCode第83题删除排序链表中的重复元素
    |
    2月前
    |
    算法
    LeetCode第23题合并 K 个升序链表
    这篇文章介绍了LeetCode第23题"合并K个升序链表"的解题方法,使用分而治之的思想,通过递归合并链表的方式解决了这个难题。
    LeetCode第23题合并 K 个升序链表
    |
    2月前
    |
    C++ 索引
    leetcode 707.设计链表
    本文提供了解决LeetCode 707题"设计链表"的C++实现,包括单链表的节点定义和类方法实现,如添加节点、获取节点值、删除节点等。
    |
    2月前
    |
    存储 Java
    |
    2月前
    |
    存储 Java API
    |
    2月前
    |
    算法
    LeetCode第92题反转链表 II
    文章分享了LeetCode第92题"反转链表 II"的解法,通过使用四个指针来记录和更新反转链表段的头部、尾部以及前一个和后一个节点,提供了一种清晰且易于理解的解决方案。
    LeetCode第92题反转链表 II
    |
    2月前
    |
    算法
    LeetCode第21题合并两个有序链表
    该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
    LeetCode第21题合并两个有序链表
    下一篇
    无影云桌面