【数据结构与算法 | 灵神题单 | 删除链表篇】力扣2487, 237

news2024/11/16 3:21:51

1. 力扣2487:从链表中删除节点

1.1 题目:

给你一个链表的头节点 head 。

移除每个右侧有一个更大数值的节点。

返回修改后链表的头节点 head 

示例 1:

ebdabf8c755c4fbf936153cc01271903.png

输入:head = [5,2,13,3,8]
输出:[13,8]
解释:需要移除的节点是 5 ,2 和 3 。
- 节点 13 在节点 5 右侧。
- 节点 13 在节点 2 右侧。
- 节点 8 在节点 3 右侧。

示例 2:

输入:head = [1,1,1,1]
输出:[1,1,1,1]
解释:每个节点的值都是 1 ,所以没有需要移除的节点。

提示:

  • 给定列表中的节点数目在范围 [1, 105] 内
  • 1 <= Node.val <= 105

1.2 思路:

单调栈。维护栈内元素的单调性。

题意就是要求反转链表后,选出不严格(就是元素相等也可以)单调递增的一组元素。

先将head的节点值入栈,从head的next节点开始遍历,如果p指向的节点的值小于栈顶元素,则将p的值入栈。如果栈不为空且其值大于栈顶元素,将栈顶元素弹出,有两种特殊情况,如果栈已经空了,或者此时的栈顶元素大于p的值了,就将p的值入栈,退出循环。否则一直pop操作。

1.3 题解:

/**
 * 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 removeNodes(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        // 单调栈
        Deque<Integer> stack = new LinkedList<>();
        // 将链表首元结点的值压入栈
        stack.push(head.val);
        ListNode p = head.next;
        while(p != null){
            if(p.val <= stack.peek()){
                stack.push(p.val);
            } else{
                while(stack.size() > 0 && p.val > stack.peek()){
                stack.pop();
                if(stack.isEmpty() || p.val <= stack.peek()){
                    stack.push(p.val);
                    break;
                }
                }
            }
            p = p.next;
        }
        ListNode dummy = new ListNode(10086, head);
        p = dummy;
        while(!stack.isEmpty()){
            // 因为栈底存储的是链表先遇到的值,而返回后的链表也基本按照
            //原来链表上的顺序,所以要从栈低抽元素
            p.next.val = stack.pollLast();
            p = p.next;
        }
        p.next = null;
        return dummy.next;
    }
}

2. 力扣237:删除链表中的节点

2.1 题目:

有一个单链表的 head,我们想删除它其中的一个节点 node

给你一个需要删除的节点 node 。你将 无法访问 第一个节点  head

链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。

删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:

  • 给定节点的值不应该存在于链表中。
  • 链表中的节点数应该减少 1。
  • node 前面的所有值顺序相同。
  • node 后面的所有值顺序相同。

自定义测试:

  • 对于输入,你应该提供整个链表 head 和要给出的节点 nodenode 不应该是链表的最后一个节点,而应该是链表中的一个实际节点。
  • 我们将构建链表,并将节点传递给你的函数。
  • 输出将是调用你函数后的整个链表。

示例 1:

输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

示例 2:

输入:head = [4,5,1,9], node = 1
输出:[4,5,9]
解释:指定链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9

提示:

  • 链表中节点的数目范围是 [2, 1000]
  • -1000 <= Node.val <= 1000
  • 链表中每个节点的值都是 唯一 的
  • 需要删除的节点 node 是 链表中的节点 ,且 不是末尾节点

2.2 思路:

看注释。

2.3 题解:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public void deleteNode(ListNode node) {
        // 将node的下一个节点的值给了node节点
        // 然后删除node节点的下一个节点即可
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字影像产业基地:绿色、智能、创新,如何并存发展?

在当今快速发展的时代&#xff0c;数字影像产业基地正以独特的魅力展现着绿色、智能、创新并存发展的崭新风貌。 绿色&#xff0c;是数字影像产业基地的底色。随着环保意识的不断提高&#xff0c;基地积极践行绿色发展理念。 智能&#xff0c;是数字影像产业基地的核心竞争力。…

4 个步骤带你快速上手 Einstein Copilot for Tableau

如果你的企业仍未部署或希望迁移至 Tableau Cloud&#xff0c;可考虑订阅 Tableau 高级套件。 自 Einstein Copilot for Tableau 发布以来&#xff0c;相信部分用户已经尝试过在 Tableau Cloud 中借助 AI 对话助理&#xff0c;快速解决数据分析中的问题&#xff0c;获得更准确的…

儿童护眼灯哪个牌子好?五款眼科医生推荐的台灯分享

随着年级的升高和学习内容的增加&#xff0c;学生的休闲娱乐时间逐渐减少&#xff0c;相反&#xff0c;他们在书桌前度过的时间却越来越多。近年来&#xff0c;由于电子产品的广泛使用&#xff0c;我国青少年的用眼负担显著增加。据权威机构预测&#xff0c;到2050年&#xff0…

隧道裂缝混泥土裂缝裂痕检测数据集 5000张 带标注 voc

隧道裂缝混凝土裂缝裂痕检测数据集 数据集规模&#xff1a; 图像数量&#xff1a;5000张标注类型&#xff1a;裂缝检测&#xff08;包括隧道内壁、桥梁、建筑结构中的裂缝&#xff09;格式兼容性&#xff1a;支持VOC标注格式 数据集内容&#xff1a; 该数据集专门用于训练和…

鸿蒙HarmonyOS应用开发者高级认证重点知识详解

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

springboot(IDEA)开发pom配置文件引用本地jar包

pom配置信息 <dependency><groupId>com.huawei.gauss200</groupId><artifactId>gsjdbc200</artifactId><version>8.1.3.6</version></dependency>将jar包引入本地maven仓库 mvn install:install-file -DfileD:/iso/gsjdbc200…

C++(进阶 ) ---模板

1. 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…

实现绑定UDP端口的Server程序

实现绑定UDP端口的Server程序 1. UDP Server的工作原理2. 伪代码3. C代码实现4. 代码解释5. 编译与运行在网络编程中,UDP(User Datagram Protocol)是一种无连接、不可靠的协议,相比于TCP,它提供了更简单的通信机制,适用于某些不要求可靠传输的应用场景。本文将介绍如何使…

<C++> set、map模拟实现

目录 一、适配器红黑树 二、红黑树再设计 1. 重新设计 RBTree 的模板参数 2. 仿函数模板参数 3. 正向迭代器 构造 operator*() operator->() operator!() operator() operator--() 正向迭代器代码 4. 反向迭代器 构造 operator* operator-> operator operator-- operat…

机械厂如何做好企业级数据治理系统落地

生产制造企业的数据治理面临着诸多难点与挑战&#xff0c;今天以某国营机械厂为例&#xff0c;分享机械制造企业数据治理经验。某机械厂是国家投资的国有大型企业&#xff0c;业务范围覆盖到零部件的研发、测试、生产制造&#xff0c;属于典型的离散制造企业。 鉴于近年来国家…

设计友好型相亲交友应用的关键要素揭秘

在设计一款友好型的相亲交友应用时&#xff0c;关键在于创造一个安全、舒适且高效的用户体验。以下是几个核心要素&#xff0c;它们共同构成了一个成功的相亲交友应用的基础&#xff08;编辑h17711347205&#xff09;。 1. 简洁直观的用户界面&#xff08;UI&#xff09; 用户…

【Java数据结构】泛型的进阶部分(泛型通配符)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

protobuf使用

我下载的是 protobuf-27.4 以下使用vs2022 根据readme&#xff0c;执行如下命令 "C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIXC:\Users\x\Downloads\install C:\Users\x\Downloads\protobuf-27.4 -D…

【动态规划】子序列问题(数组中不连续的一段)

子序列问题 1.最长递增子序列2.摆动序列3.最长递增子序列的个数4.最长数对链 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.最长递增子序列…

Java+Swing学生信息管理系统

JavaSwing学生信息管理系统 一、系统介绍二、功能展示1.管理员登陆2.学生信息查询3.学生信息添加4.学生信息修改5.删除 三、系统实现1.StudentFrame .java 四、其它1.其他系统实现 一、系统介绍 该系统实现了管理员系统登陆、学生信息查询、学生信息添加、学生信息修改、学生信…

【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用

目录 一、并查集 适用范围 三大基本操作 二、经典题目 题目&#xff1a;卡码网 107. 寻找存在的路径 题目链接 题解&#xff1a;并查集 三、小结 一、并查集 适用范围 动态连通性问题&#xff1a;并查集可以判断两个节点是否在同一个连通分量中&#xff0c;这在处理网络…

对耳朵伤害最小的耳机类型,开放式耳机最大程度保护耳道健康

开放式耳机是目前比较流行的耳机种类&#xff0c;其特点是通过采用海绵状的微孔发泡塑料制作透声耳垫&#xff0c;或利用骨传导、气传导等技术传音&#xff0c;不使用厚重的染音垫&#xff0c;没有与外界的隔绝感&#xff0c;佩戴者在享受音乐的同时&#xff0c;也能听到一部分…

WordPress自动备份至群辉NAS

目录 一、配置群辉NAS 1、开启远程管理 2、开启群辉NAS的FTP服务 3、新增网址备份路径 4、新增备份账户 5、设定备份账户能访问的资源 二、插件安装 三、配置插件 四、手工备份 五、自动备份 六、插件中的备份管理 七、数据还原 (本文讲述了WordPress搭建的网址,…

《数字信号处理》学习06-因果系统与稳定系统

目录 一&#xff0c;因果系统 二&#xff0c;稳定系统 之前学习了系统中的线性时不变系统&#xff08; 系统&#xff09;&#xff0c;接下来学习线性时不变系统&#xff08; 系统&#xff09;中的因果系统与稳定系统。&#xff08;非LTI系统这里暂时不作为学习的要求&#xf…

Java实现自定义线程池

Java实现自定义线程池 ThreadPool public interface ThreadPool {void execute(Runnable runnable);void shutdown();int getInitSize();int getMaxSize();int getCoreSize();int getQueueSize();int getActiveCount();boolean isShutdown(); }RunnableQueue public interfac…