秋招-数据结构-链表篇

2023-11-16

秋招-数据结构-链表篇

介绍

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

技巧

可以使用快慢指针来解决一些循环、遍历等问题,也可以借助PriorityQueue优先级队列,最小堆等其他结构,用空间换时间。

例题

86. 分隔链表

image-20220802231044809

class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode more,less,te_more,te_less;
        te_more = more = new ListNode();
        te_less = less = new ListNode();


        while(head!=null){
            if(head.val<x){
                less.next = new ListNode(head.val);
                less = less.next;
            }else{
                more.next = new ListNode(head.val);
                more = more.next;
            }
            head = head.next;

        }

        less.next = te_more.next;
        return te_less.next;

    }
}

23. 合并K个升序链表

image-20220802232004379

每次取lists里面的每个头结点,找最小的构建新链表,这个找最小的可以用PriorityQueue来解决

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if (lists.length == 0) return null;
        // 虚拟头结点
        ListNode dummy = new ListNode(-1);
        ListNode p = dummy;
        // 优先级队列,最小堆
        PriorityQueue<ListNode> pq = new PriorityQueue<>(
            lists.length, (a, b)->(a.val - b.val));
        // 将 k 个链表的头结点加入最小堆
        for (ListNode head : lists) {
            if (head != null)
                pq.add(head);
        }

        while (!pq.isEmpty()) {
            // 获取最小节点,接到结果链表中
            ListNode node = pq.poll();
            p.next = node;
            if (node.next != null) {
                pq.add(node.next);
            }
            // p 指针不断前进
            p = p.next;
        }
        return dummy.next;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

秋招-数据结构-链表篇 的相关文章

随机推荐

  • docker 四种网络模型

    一 docker网络基础知识 Docker在创建容器时有四种网络模式 bridge为默认不需要用 net去指定 其他三种模式需要在创建容器时使用 net去指定 bridge模式 使用 net bridge指定 默认设置 none模式 使用
  • java各类型String,int,char,long,StringBuilder,StringBuffer,Integer之间的转换总结

    String和char类型之间的转换 1 String char 因为String是字符串 而char是单个字符 只能把String 转化为char数组 方法为 char ch str toCharArray 2 char String 方
  • cmake命令之target_include_directories

    一 介绍 命令格式 target include directories
  • 完整的芯片反向设计流程原来是这样的!(实例讲解)

    完整的芯片反向设计流程原来是这样的 实例讲解 作者 时间 2018 02 23来源 网络收藏 现代IC产业的市场竞争十分激烈 所有产品都是日新月异 使得各IC设计公司必须不断研发新产品 维持自身企业的竞争力 IC设计公司常常要根据市场需求进
  • 在JavaScript的ES5版本中Array数组的reduce方法详解

    函数声明 reduce callback initialValue 参数说明 callback 回调函数 格式为function prev next initialValue 初始值 可选参数 返回值 最后一次执行callback 回调函数
  • SOME/IP

    SOME IP 名词解释 SOME IP 全称是 Scalable service Oriented MiddlewarE over IP 也就是基于 IP 协议的面向服务的可扩展性通信中间件协议 面向服务 SOA 基于 IP 协议之上的通
  • springcloud动态加载日志路径和log.path_IS_UNDEFINED目录问题

    多模块工程中通常需要将不同模块服务的日志输出到指定的目录 日志目录结构如下 logs app1 app2 基于上述需要 需要在logback spring xml中动态读取application yml 或者application prop
  • 简单的tcpdump抓包使用总结:抓取指定ip、指定网卡、指定端口的包

    1 今天由于需要抓包研究网络问题 所以研究了一下抓取指定ip 指定网卡 指定端口的包并且输入到文件中 2 tcpdump与Wireshark介绍 在网络问题的调试中 tcpdump应该说是一个必不可少的工具 和大部分linux下优秀工具一样
  • ES使用小结

    ES使用总结 1 查询es全部索 2 根据es索引查询文档 3 查看指定索引mapping文件 4 默认查询总数10000条 5 删除指定索引文档 6 删除所有数据包括索引 7 設置窗口值 8 logstash简单配置 Logstash配置
  • 高德地图Amap常用功能总结

    设置缩放比例 1 设置缩放比例的api是 aMap moveCamera CameraUpdateFactory zoomTo 18 如果你直接设置是没用的 因为此时地图还没加载成功 所以要监听地图加载成功的事件 aMap setOnMap
  • MATLAB中均值、方差、均方差的计算方法

    1 均值 数学定义 Matlab函数 mean gt gt X 1 2 3 gt gt mean X 2 如果X是一个矩阵 则其均值是一个向量组 mean X 1 为列向量的均值 mean X 2 为行向量的均值 gt gt X 1 2 3
  • sql查询按两个字段查询重复记录

    1 sql查询按两个字段查询重复记录 代码如下 示例 select from 表名 a where a 字段1 in select 字段1 from 表名 group by 字段1 字段2 having count gt 1 and a 字
  • STM32通过ESP8266利用机智云平台实现手机远程操作

    STM32通过ESP8266利用机智云平台实现手机远程操作 将STM32作为主控芯片 ESP8266作为外设 利用串口传递信息 通过机智云平台实现STM32与手机之间的数据传输 之所以选择机智云平台 是因为机智云平台相关配套的软件工具非常齐
  • 【每日一题】Leetcode 刷题 二叉树-树的遍历 介绍

    二叉树 树的遍历 前序遍历 根 左 右 中序遍历 左 根 右 后序遍历 左 右 根 代码实现 前序遍历 中序遍历 后序遍历 完整代码 前序遍历 根 左 右 遍历顺序分别为 F B A D C E G I H 中序遍历 左 根 右 中序遍历顺
  • 常见的 HTML<meta> 标签的 name 属性及其作用

    HTML中的 标签可以通过 name 属性提供元数据 这些元数据可以用于指定有关文档的信息 以及控制浏览器和搜索引擎的行为 name 属性通常与其他属性一起使用 如 content charset http equiv 等 以提供更具体的元
  • 2022国赛34:路由器之间ISIS协议配置

    大赛试题内容 5 RT1以太链路 RT2以太链路之间运行ISIS协议 进程10 分别实现loopback3 之间ipv4互通和ipv6互通 RT1 RT2的NET分别为10 0000 0000 0001 00 10 0000 0000 00
  • web基础学习(十)CSS3之 @keyframes 、animation

    css3新增属性 keyframes 关键帧 可以帮助开发者不必依赖JavaScript 只使用css代码完成动画制作 那么如何使用 keyframes呢 这里有两个重要知识点 1 keyframes 定义关键帧 语法 keyframes
  • 低功耗技术——流水线设计(加法器和乘法器)

    文章目录 前言 一 流水线 1 16bit加法器 2 无符号4bit乘法器 3 编写一个4bit乘法器模块 并例化该乘法器求解c 12 a 5 b 二 降低FPGA功耗 1 静态功耗 2 动态功耗 前言 2023 3 31 今天学习降低功耗
  • Python——shutil模块

    os模块不仅提供了新建文件 删除文件 查看文件属性的操作功能 还提供了对文件路径的操作功能 但是 对于移动 复制 打包 压缩 解压文件及文件夹等操作 os模块没有提供相关的函数 此时需要用到shutil模块 shutil模块是对os模块中文
  • 秋招-数据结构-链表篇

    秋招 数据结构 链表篇 介绍 链表是一种物理存储单元上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 链表中每一个元素称为结点 组成 结点可以在运行时动态生成 每个结点包括两个部分 一个是存储