Leetcode.19 删除链表的倒数第 N 个结点

news2024/9/24 17:14:13

题目链接

Leetcode.19 删除链表的倒数第 N 个结点 mid

题目描述

给你一个链表,删除链表的倒数第 n n n 个结点,并且返回链表的头结点。

示例 1:

在这里插入图片描述

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:
  • 链表中结点的数目为 s z sz sz
  • 1 ≤ s z ≤ 30 1 \leq sz \leq 30 1sz30
  • 0 ≤ N o d e . v a l ≤ 100 0 \leq Node.val \leq 100 0Node.val100
  • 1 ≤ n ≤ s z 1 \leq n \leq sz 1nsz

解法一:栈

用一个栈 s t k stk stk,先将所有链表节点入栈。

然后再弹出 n n n 个节点,此时栈顶节点就是 倒数第 n + 1 n + 1 n+1 个节点。

我们直接让 倒数第 n + 1 n + 1 n+1 个节点 指向 倒数第 n − 1 n - 1 n1 个节点,这样就把 倒数第 n n n 个节点删除了。

注意: 由于可能弹出全部的节点,栈可能为空,所以我们要对边界条件做特殊处理。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        stack<ListNode*> stk;

        ListNode* cur = head;
        while(cur){
            stk.push(cur);
            cur = cur->next;
        }

        for(int i = 0;i < n;i++) stk.pop();
        
        if(stk.empty()) return head->next;
        ListNode* pre = stk.top();
        pre->next = pre->next->next;

        return head;
    }
};

解法二:双指针

我们开始让 f a s t , s l o w fast ,slow fast,slow 分别指向 链表头节点 h e a d head head

接着让 f a s t fast fast 先走 n n n 步,此时 f a s t fast fast s l o w slow slow 之间就间隔 n n n 个节点。

接着再让 f a s t , s l o w fast,slow fast,slow 往后移动,当 f a s t fast fast 为空的时候说明此时 s l o w slow slow 就是 倒数第 n n n 个节点。

我们在删除这个 倒数第 n n n 个节点即可。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        
        ListNode* dummy = new ListNode(-1);
        ListNode* pre = dummy;
        pre->next = head;

        ListNode* fast = head , *slow = head;
        while(n--){
            fast = fast->next;
        }

        while(fast){
            pre = pre->next;
            slow = slow->next;
            fast = fast->next;
        }

        pre->next = pre->next->next;

        return dummy->next;

        return head;
    }
};

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

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

相关文章

XAMPP、Apache搭建本地PHP服务器(全网最保姆级)

XAMPP搭建本地PHP服务器 用XAMPP搭建本地PHP服务器&#xff0c;运行php文件 启动服务 打开后进入如下界面&#xff1a;根据自己的需要启动服务 我这里打开的是Apache和MySQL 可以根据自己的习惯修改端口号 默认是8080 我这里修改为80端口 修改监听的端口号 Httpd.conf文件…

【小笔记】为什么文本相似度要用余弦相似度而不用欧式距离?

欧式距离 它计算的是高维空间中两个点之间的绝对距离&#xff0c;不考虑向量的方向性 余弦相似度 它计算的是两个向量夹角的cos值&#xff0c;只关注向量的方向&#xff0c;不考虑向量的绝对大小&#xff08;因为不管长短&#xff0c;都会除以模变成单位向量&#xff09;&am…

【面试经典150 | 区间】用最少数量的箭引爆气球

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;合并区间 其他语言python3 写在最后 Tag 【合并区间】【排序】【数组】 题目来源 452. 用最少数量的箭引爆气球 题目解读 每个气球都有一个占据x轴的一个范围&#xff0c;在这个范围里射出一只箭就会引爆该气球&…

03、MySQL-------数据库中间件MyCat实现读写分离

目录 八、数据库中间件MyCat实现读写分离1、克隆&#xff1a;2、配置分析&#xff1a;1、schema.xml2、启动mycat&#xff1a;3、关闭防火墙&#xff1a;4、代码测试&#xff1a;测试写入&#xff1a;测试读&#xff1a;强制读Master 八、数据库中间件MyCat实现读写分离 作用&…

gcc编译C语言

目录 文章目录 一、gcc编译C语言过程1. 预处理阶段2. 编译阶段3. 汇编阶段4. 链接阶段 二、示例1.预处理2.编译3.汇编4.链接5.执行命令 一、gcc编译C语言过程 gcc编译C语言程序的过程分成四个阶段&#xff1a;预处理、编译、汇编和链接。 编译流程命令作用解释预处理阶段gcc …

EasyRule源码:EasyRule框架源码分析

目录 1.简要介绍EasyRule 2.从实例入手看EasyRule使用方法 3.执行过程源码分析 3.1 Fact&Facts 3.2 规则定义和注册 3.2.1 Rule接口 3.2.2 规则注册管理 3.2.3 创建规则代理 3.3 规则引擎调度执行 1.简要介绍EasyRule 当下的规则引擎选择非常多&#xff0c;例如 …

PN8016 宽输出范围非隔离交直流转换芯片适用于非隔离的辅助电源

PN8016集成PFM控制器及800V高雪崩能力智能功率MOSFET&#xff0c;用于外围元器件极精简的小功率非隔离开关电源&#xff0c;输出电压可通过FB电阻调整。 PN8016内置800V高压启动与自供电模块&#xff0c;实现系统快速启动、超低待机、自供电功能。该芯片提供了完整的智能化保护…

Twitter正在测试年度订阅以进行推文和转推

导语&#xff1a;最近&#xff0c;Twitter&#xff08;现更名为X&#xff09;正在测试新的年度订阅服务&#xff0c;为未经验证的账户提供推文和转推等核心功能。这一举措是一个名为“Not A Bot”的测试计划的一部分&#xff0c;从本周二开始在新西兰和菲律宾用户中推出。通过设…

【MyBatis】mybatis工具类迭代

目录 MyBatis工具类的迭代 ThreadLocal使用 mybatis工具类终极版&#xff1a; MyBatis工具类的迭代 public class MyBatisUtil {//工具类构造方法私有化private void MyBatisUtil() {}//方法一public static SqlSession getSqlSession(){try {SqlSessionFactoryBuilder sql…

Xilinx DDR4 MIG 的调试

平台&#xff1a;Vivado2021.1 芯片&#xff1a;xcku115-flva1517-2-i (active) 语言&#xff1a;VerilogHDL 参考文件&#xff1a;pg150.下载地址 pg150-ultrascale-memory-ip.pdf • 查看器 • AMD 自适应计算文档门户 (xilinx.com) DDR4介绍 DDR4&#xff0c;即第四代…

隐藏Zotero批注图标(便利贴)

使用Zotero看文献做批注的时候&#xff0c;会出现图上类似于便利贴的图标&#xff0c;容易遮挡字体。 在"编辑"中选择"首选项"&#xff0c;"翻译"中去掉勾选"自动翻译批注"。 就好了

python二次开发Solidworks:扫描

在新零件文档中创建一个圆形草图和两条线段草图&#xff0c;并将它们插入到模型中。接着&#xff0c;选中圆形草图作为扫描轮廓&#xff0c;并选中两条线段草图并将它们分组为一个对象。最后&#xff0c;使用特征管理器的InsertProtrusionSwept4方法创建扫描特征。 import win…

gson如何序列化子类

需求 目前有一个需求&#xff0c;不同对象有一些公共属性&#xff0c;分别也有一些不同的属性。对方传过来的json字符串中&#xff0c;把这些对象组成了一个数组返回过来的。这样该如何反序列化呢&#xff1f; 举例 定义Person类、Student类、Worker类&#xff1b; Data To…

【MATLAB第80期】基于MATLAB的结构核岭回归SKRR多输入单输出回归预测及分类预测模型

【MATLAB第80期】基于MATLAB的结构核岭回归SKRR多输入单输出回归预测及分类预测模型 SKRR这是Gustau Camps-Valls等人在“用深度结构核回归检索物理参数”中提出的结构核岭回归&#xff08;SKRR&#xff09;方法。 参考文献&#xff1a; Camps-Valls,Retrieval of Physical Pa…

期中考核复现(web)

1z_upload 进到这个页面里面还是挺懵的&#xff0c;什么也不知道 点添加书籍之后发现变成了sql 师兄给了源码&#xff0c;看了之后找到了他的限制函数 但是肯定要先登录才可以 登录还是用bp爆破 最后得到账号密码是admin/admin12345 进来之后就可以看到那个文件上传的地方 上…

RabbitMQ入门到实战教程,MQ消息中间件,消息队列实战

消息队列是目前最常见的微服务中间件之一&#xff0c;而RabbitMq在全球范围内的使用率也是名列前茅。它以稳定性强、并发高、低时延的特点深受广大企业开发者的喜爱。然而市面上一致缺乏一个专门的RabbitMQ课程&#xff0c;所以这套课程应运而生。 微服务一旦拆分&#xff0c;必…

【Bug】【内存相关】偶然发现一个内存溢出Bug复盘

一、问题 跑自动化用例的时候&#xff0c;uat-sg环境&#xff0c;发现SGW经常会返回 502 Bad Gateway响应 二、原因 经过SRE和BE Dev共同排查&#xff0c;502 是从ALB-- > 后端服务 后端服务无法响应导致&#xff0c;ALB会直接给客户端返回502。 服务端&#xff1a;由于c…

C# Winform编程(6)高级控件

C# Winform编程&#xff08;6&#xff09;高级控件 RadioButton&#xff08;单选框&#xff09;PictureBox&#xff08;图像框&#xff09;TabControl&#xff08;选项卡&#xff09;ProgressBar(进度条)TrackBar(滑动条)ImageList&#xff08;图像列表控件&#xff09;ToolBar…

29栈与队列——优先队列

目录 LeetCode之路——347. 前 K 个高频元素 分析 优先队列 简单示例 运行结果 源码简析 LeetCode之路——347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: num…

一剑破万法:noexcept与C++异常导致的coredump

作为C/C程序员&#xff0c;最不想见到的就是coredump。导致coredump的原因有很多&#xff0c;今天我来谈一下其中一种十分常见的原因&#xff0c;那就是由于C异常没有被catch导致的coredump。 从一篇知乎文章讲起 先看一位知友的文章&#xff1a; C11 std::thread异常coredu…