每日一练:删除1链表的倒数第N个节点

news2025/1/12 2:49:23

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

一、题目要求

给你一个链表,删除链表的倒数第 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]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

进阶:你能尝试使用一趟扫描实现吗?

以上内容来自LeetCode

二、解法1-递归 O(N)

        递归到nullptr后就返回上一个递归时的cur是倒数第几个节点,找到倒数第N个节点的上一个节点,然后去掉第N个节点,如果是头节点需要单独处理。

class Solution {
public:
    int _removeNthFromEnd(ListNode* cur) {
        if (cur == nullptr)
            return 1;
        int n = _removeNthFromEnd(cur->next);
        if (cur == *Head && m == n) { // 删除头节点
            *Head = (*Head)->next;
        }
        if (m == n - 1) {
            cur->next = cur->next->next;
        }
        return n + 1;
    }
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        m = n;
        Head = &head;
        _removeNthFromEnd(head);
        return head;
    }
private:
    int m;
    ListNode** Head;
};

       

三、解法2-双指针 O(N)

        我们可以让两个指针first和last先相距n,然后first和last同时向后走,当last走到nullptr时停止;

        此时first的位置就是要删除的节点,所以还要一个prev保存first的前一个节点,便于删除;

        同样的,删除头节点要作特殊处理。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        if(head->next == nullptr)
            return nullptr;
        ListNode* first = head;
        ListNode* last = head;
        while(n--)
        {
            last = last->next;
        }
        ListNode* prev = first;
        while(last)
        {
            last=last->next;
            prev = first;
            first=first->next;
        }
        if(head == first)
            head = head->next;
        prev->next = prev->next->next;
        return head;
    }
};

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

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

相关文章

Ubuntu在CMakeLists.txt中指定OpenCV版本的参考方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a;   Ubuntu20.04, ROS-Noetic, OpenCV-4.2.0, OpenCV-4.5.4。 一、问题描述 编译运行OpenCV遇到如下报错&#xff1a; terminate called after throwing an instance of cv::Excep…

springbootadmin源码编译修改001_node版本管理工具nvm_任意切换node版本---VUE工作笔记0026

由于项目需要对springbootadmin的源码进行编译和修改. 但是springbootadmin的源码编译很麻烦,主要是由于,springbootadmin-server-ui这个项目,因为他是一个前后端分离的 vue项目,而且是使用 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 首先去下载,发…

Day 72

作业 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLineEdit> #include <QLabel> #include <QIcon> #include <QPushButton> #include <QMovie> #include <QPainter> #include <QWidget> …

最好用的 Redis 可视化工具,不愧是官方出品,功能确实强大(带私活源码)

对于开发人员来说&#xff0c;很多人都用过Redis&#xff0c;它对于数据 key-value 结构的存储系统性能表现很优秀。 当然了&#xff0c;在很多的项目都用到。 当存储数据量比较大时&#xff0c;我们想要直观的看 Redis 里面的数据&#xff0c;除了代码&#xff0c;当然就要采…

基于Spark 的零售交易数据挖掘分析与可视化

基于Spark 的零售交易数据挖掘分析与可视化 本文将带你通过 PySpark 进行电商数据的分析处理&#xff0c;并将结果保存为 JSON 文件&#xff0c;供前端展示。我们将从数据的读取、处理、分析到结果保存和网页展示&#xff0c;覆盖完整的数据流。项目结构如下&#xff1a; 1、…

【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新

#效果图 #思路 ##步骤&#xff1a; ###一、利用picker api选择1张图片 实例化选择器参数(使用new PhotoSelectOptions())实例化图片选择器 (使用newPhotoViewPicker() )调用图片选择器的select方法传入选择器参数完成图片选取获得结果 利用picker api选择1张图片 async sele…

(一) 遥感中的大气窗口和 OBIA

摘要: 什么是地球的大气窗口? 不知您是否想过,光是如何穿过大气层到达地球的呢?这是源于大气中的臭氧、水、二氧化碳和其他分子,我们可以免受有害辐射的伤害。因此,我们只能看到电磁波谱的特定部分,这种现象被称为地球的“大气窗口”。 在遥感领域,传感器被建造来拾取那…

无人机巡检:突破传统局限,引领智能监测新时代

无人机行业正在经历快速发展&#xff0c;技术不断创新&#xff0c;应用领域不断拓展。从最初的航拍娱乐到如今的工业巡检、农业植保、物流配送、灾害救援等&#xff0c;无人机正展现出巨大的实用价值。如今&#xff0c;行业级无人机应用不断扩展&#xff0c;在测绘与泛测绘领域…

中控室控制台处在自动状态什么意思

在现代工业和智能控制系统中&#xff0c;中控室控制台作为集中控制和管理各种设备、系统和流程的核心&#xff0c;扮演着至关重要的角色。当提到中控室控制台处在自动状态时&#xff0c;这通常意味着控制台已经切换到一种高度智能化的工作模式&#xff0c;能够自动调整和管理各…

【Linux】数据链路层

一、数据链路层引入 1.1 数据链路层的功能 在网络层中&#xff0c;我们使用IP协议进行通信&#xff0c;需要进行跨网络转发到目标主机&#xff0c;本质上就是一个报文经历了无数个子网&#xff0c;而数据链路层就是解决在一个子网中如何传输报文的问题。 数据链路层的功能是&a…

通义灵码用户说:“人工编写测试用例需要数十分钟,通义灵码以毫秒级的速度生成测试代码,且准确率和覆盖率都令人满意”

通过一篇文章&#xff0c;详细跟大家分享一下我在使用通义灵码过程中的感受。 一、定义 通义灵码&#xff0c;是一个智能编码助手&#xff0c;它基于通义大模型&#xff0c;提供代码智能生成、研发智能问答能力。 在体验过程中有任何问题均可点击下面的连接前往了解和学习。 …

网络安全实训八(y0usef靶机渗透实例)

1 信息收集 1.1 扫描靶机IP 1.2 收集靶机的端口开放情况 1.3 探测靶机网站的目录 1.4 发现可疑网站 1.5 打开可疑网站 2 渗透 2.1 使用BP获取请求 2.2 使用工具403bypasser.py探测可疑网页 2.3 显示可以添加头信息X-Forwarded-For:localhost来访问 2.4 添加之后转发&#xff…

芯片设计项目管理:国内某知名芯片半导体企业引进 PowerProject,构建国产化项目管理平台

国内芯片设计行业发展快速&#xff0c;随着其行业技术能力的不断扩大&#xff0c;芯片设计涵盖的领域和内容愈加丰富&#xff0c;因此&#xff0c;对专业化的项目管理理念与思路提出了更高的要求。 近日&#xff0c;国内某知名芯片设计企业选择北京奥博思软件技术有限公司&…

jantic/DeOldify部署(图片上色)附带Dockerfile和镜像

1. 克隆代码到DeOldify git clone https://github.com/jantic/DeOldify.git DeOldifyDeOldify源码 2. 安装依赖 这里会安装python以及创建deoldify环境 cd DeOldify conda env create -f environment.yml(base) rootDESKTOP-1FOD6A8:~/DeOldify# conda env create -f environm…

Java开发安全及防护

目录 一、开发安全 二、XSS介绍及防范措施 2.1何为XSS 2.2XSS分类 2.3常用方法 三、SQL注入介绍及防范措施 3.1何为SQL注入 3.2常用方法 四、重放介绍及防范措施 4.1何为重放 4.2常用方法 一、开发安全 在学习安全之前&#xff0c;我们首先学习漏洞&#xff0c;知道漏…

JavaScript控制语句和函数的使用

文章目录 前言一、控制语句 1.if条件语句2.switch多分支语句3.for循环语句4.while循环语句5.do...while循环语句6.break 与 continue 关键字二、函数 1.函数的定义2.函数的调用总结 前言 JavaScript 的控制语句和函数的使用&#xff0c;基本上同理于 Java。该篇文章主要展示如何…

力扣之1783.大满贯数量

文章目录 1. 1783.大满贯数量1.1 题干1.2 建表1.3 题解1.4 结果截图 1. 1783.大满贯数量 1.1 题干 表&#xff1a;Players ----------------------- | Column Name | Type | ----------------------- | player_id | int | | player_name | varchar | ----------------------…

深度学习实战89-基于改造后的长短期记忆网络LSTM 的猪肉价格预测模型研究

大家好,我是微学AI,今天给大家介绍一下深度学习实战89-基于改造后的长短期记忆网络LSTM 的猪肉价格预测模型研究。本文围绕基于改造后的长短期记忆网络 LSTM 的猪肉价格预测模型展开研究。首先介绍项目背景,阐述进行猪肉价格预测的重要性。接着详细讲解改造后的 LSTM 模型原…

LibSVM介绍及使用

介绍 LibSVM 是一个广泛使用的开源库&#xff0c;用于支持向量机&#xff08;SVM&#xff09;的实现。它由台湾大学的 Chih-Chung Chang 和 Chih-Jen Lin 开发。LibSVM 提供了一种简单易用的接口&#xff0c;支持多种 SVM 变体&#xff0c;包括分类、回归和分布估计。以下是一些…

【数据库】MySQL-基础篇-事务

专栏文章索引&#xff1a;数据库 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、事务简介 二、事务操作 1.未控制事务 1.1 测试正常情况 1.2 测试异常情况 2.控制事务一 1.1 查看/设置事务提交方式 1.2 提交事务 1.3 回滚事务 3.控制事务二 1.1 开启事…