首页 > 其他分享 >合并 K 个升序链表

合并 K 个升序链表

时间:2023-10-24 09:34:17浏览次数:33  
标签:ListNode val int 合并 lists 链表 升序 节点

 例如在一个数组里存放几组链表,要解决按照升序合并这几个链表可以按照合并两个链表的思想,比较val大小,小的被链接,然后指针后移,但由于是数组所以需要遍历找到最小的几组链表里最小的那个节点,以及在数组中的位置,其方法就是按照链表特性每次比较子数组的中的head节点,即例如lists[0]的第一个节点lists[1]的第一个,lists[2]的第一个,谁小谁被记录然后咋该节点组内后移,后移的那个节点作为新的第一个节点。

 

 

*最核心的一点就是尾插最小节点后需要将最小的节点所在的那一组进行指针后移操作,不然下一次就没办法比较后一组数据

lists[Pointer]=lists[Pointer].next;
/**
 * 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) {
        int len=lists.length;
        ListNode dummy=new ListNode(0);
        ListNode tail=dummy;
        while(true){
            ListNode minNode=null;
            int Pointer=-1;
            //寻找值最小的节点
            for(int i=0;i<len;i++){
                if(lists[i]==null){
                    continue;
                }
                if(minNode==null|| lists[i].val<minNode.val){
                    //值最小的节点
                    minNode=lists[i];
                    //值最小节点的位置
                    Pointer=i;
                }
                
            }
            //k组链表均为空直接跳出循环
            if(Pointer==-1){
                    break;
                }
            //尾指针链接值最小的节点
            tail.next=minNode;
            tail=tail.next;
            //组内下移
            lists[Pointer]=lists[Pointer].next;

        }
        return dummy.next;
    }
}

 

标签:ListNode,val,int,合并,lists,链表,升序,节点
From: https://www.cnblogs.com/copyjames/p/17783982.html

相关文章

  • 链表理论部分
    链表理论部分什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针)、最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。如图所示:链表的类型接下来说一下链表的......
  • 01_移除链表元素
    移除链表元素题意:删除链表中等于给定值val的所有节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]203.移除链表元素实现代码如下:(本代码是通过带头节点的单链表来实现......
  • LeetCode | 19. 删除链表的倒数第 N 个结点
    1相关标签链表、双指针、C语言2报错情况2.1题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。2.2错误代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNo......
  • 【学习笔记】线段树合并
    前置知识:动态开点权值线段树。线段树合并,顾名思义,就是将两棵权值线段树合并在一起。为什么不把两棵普通的线段树合并呢?因为那样好像没啥用。我们知道,权值线段树支持着查询某个数的个数、查询第\(k\)大/小的数等操作,有了合并操作之后就可能会支持一些令人意想不到的操作。放张......
  • [Leetcode] 0088. 合并两个有序数组
    88.合并两个有序数组题目描述给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1......
  • 这个面试官真烦,问完合并又问拆分。
    你好呀,我是歪歪。这次来盘个小伙伴分享给我的一个面试题,他说面试的过程中面试官的问了一个比较开放的问题:请谈谈你对于请求合并和分治的看法。他觉得自己没有答的特别好,主要是没找到合适的角度来答题,跑来问我怎么看。我能怎么看?我也不知道面试官想问啥角度啊。但是这种开放......
  • Pandas在合并数据的时候,发现部分数据缺失,该怎么解决?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个Pandas数据合并的问题,一起来看看吧。请教:对两个exlce表示进行合并,df=pd.merge(df1,df2,on="用户账号",how='left'),但是由于系统数据的原因,df1表格的“用户账户”缺少最后两位数,而df2中的“用户账户”是准确的,通过......
  • 倾斜摄影三维模型根节点合并技术方法探讨
    倾斜摄影三维模型根节点合并技术方法探讨 倾斜摄影技术是一种通过无人机或其他航空器采集大量高分辨率照片,并使用特殊软件将这些照片拼接成三维模型的方法。在这个过程中,摄影机以倾斜角度拍摄照片,从而捕捉到目标物体的多个视角,从而实现更精细和真实的建模效果。在创建倾斜摄......
  • 轻松合并Excel工作表:Java批量操作优化技巧
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如,学校给老师统计课时,医院给医护人员统计班次等。传统的手工方式需要......
  • 矩阵加法、矩阵乘法。合并矩阵
    加法矩阵的维度必须相同,即它们具有相同的行数和列数乘法 两个矩阵的维度必须满足乘法条件。具体来说,第一个矩阵的列数必须等于第二个矩阵的行数。如果第一个矩阵是m×n(m行n列),第二个矩阵是n×p(n行p列),那么它们可以相乘,结果将是一个m×p的矩阵。 ......