力扣 19删除链表的倒数第 N 个结点

【中等】力扣算法题解析LeetCode19:删除链表的倒数第N个结点 本文介绍了如何删除链表倒数第n个节点的算法。关键思路是使用双指针技巧,通过快指针先移动n步,再与慢指针同步移动,最终定位待删除节点的前驱。通过引入哑节点统一处理边界情况,算法在O(L)时间复杂度和O(1)空间复杂度内完成。Java实现中,快慢指针从哑节点出发,快指针先走n步后同步移动,当快指针到达末尾时,慢指针指向待删除节点的前驱,直接修改指针完成删除。该方法高效简洁,适合处理链表操作问题。 阅读详情

题目

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

img

示例 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

解释与代码

方法有三种:

  • 最普通的长度计算(遍历一遍,然后第二次扫描到的时候处理)
  • 用栈进行辅助(入栈,弹出时计数)
  • 双指针(first比second超前n)

以栈的写法为代码示例

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        stack<ListNode*> sl;
        ListNode* sw = head;
        while (head) {
            sl.push(head);
            head = head->next;
        }
        int cnt = 0;
        while (1) {
            cnt++;
            if (cnt == n) {
                if (sl.size() == 1) {// l
                    return sl.top()->next;
                } else {
                    sl.pop();
                    sl.top()->next = sl.top()->next->next;
                    return sw;
                }
            }
            sl.pop();
        }
        return head;
    }
};
Cursor自动生成测试用例 或者把你已有的规则直接复制粘贴到这个文档内(这里我用的是Markdown格式和CSV格式的测试用例生成规则,可以同时生成Markdown和CSV格式的测试用例)。在AI对话框这里,我们可以看到Cursor会逐步来帮我们生成测试用例,先分析识别需求文档,然后生成测试用例,最后会进行质量检查,确保生成的用例符合规范。生成的Markdown格式,可直接导入Xmind,生成思维导图,对应到具体的功能模块看具体的测试点,逻辑会更直观一些。(1)选中规则文档和需求文档:@你的测试用例规则文档@你的需求文档。 阅读详情

相关推荐

MATLAB下pdf文件操作读取示例

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

UESTC 五高考3模拟的博客 6558

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

力扣(LeetCode)——19. 删除链表的倒数第 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] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1

壹的博客 475

TBOX(Telematics Box)在智能网联汽车中的核心功能与应用场景解析

TBOX(Telematics Box)是智能网联汽车的“中枢神经”,基于Android或Linux操作系统,并通过CAN总线与车辆深度交互。它实现了远程控制、车辆状态监控、OTA升级及紧急呼叫(E-CALL)等核心功能,是提升用车安全、便利性与实现车辆持续进化的关键技术组件。

weixin_29158413的博客 803

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

通过使用两个指针来实现的,一个快指针(fast)首先向前移动 n 步,然后快指针和慢指针(slow)一起移动直到快指针到达链表尾部。最后,函数删除了在开始时创建的哑节点(虚拟头节点),并返回链表的新头节点。然后,它通过第一次遍历计算出链表的长度,接着计算出要到达的节点,最后通过第二次遍历找到目标节点的前一个节点。通过修改指针,实现了目标节点的删除,并且在结束前释放了删除节点和哑节点占用的内存。输入:head = [1,2,3,4,5], n = 2。输入:head = [1,2], n = 1。

m0_73841621的博客 872

通过CN3口直接控制台达伺服电机A2-M(二)

既然可以通过RS485与伺服驱动器进行通讯,那么就肯定可以控制转速 首先,需要了解下 ‘控制模式及控制命令输入源设定’ 依据以上资料,速度控制模式有两种,S和SZ模式,分别对应模式选择中的02和04,对P1-01的地址0102进行写地址操作即可实现,一开始我使用了S模式,但是这个模式在寸动模式下会自动运转,不符合我控制的要求,后面改用SZ模式,就可以实现零速度。 使用串口工具发送命令:“01 06 01 02 00 04 28 35”即可以实现设置,设置完成后可以手动在伺服驱动器的按键面板上进行确

HKing_evil的博客 6825

(力扣)LeetCode19. 删除链表的倒数第 N 个结点(C++/C语言)

【墨染】快慢指针 or 朴素做法。一题双解。

墨染 428

【软考中级网络工程师】知识点之 ICMP 协议

本文聚焦软考中级网络工程师必备的 ICMP 协议知识,先概述其在 TCP/IP 协议族网络层的地位与无连接特性,再阐述差错报告、网络诊断等功能。解析报文格式,详解差错与查询类报文类型及工作机制,还介绍其在 Ping、Traceroute 命令中的应用,分析常见攻击与防范措施,最后总结核心要点,为网络工程师学习和应用 ICMP 协议提供全面指导。

邓邓子的博客 1402

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

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?

yyh520025的博客 713

windows中通过docker部署LocateAnything-3B模型

windows中通过docker部署LocateAnything-3B模型

yilvyangguang520的博客 485

硬核入门!Python爬虫实战:爬取豆瓣读书TOP250,书名+评分+简介,一键生成精美Excel书单(2026避坑版)

通过这个实战,你不仅获得了一份珍贵的豆瓣TOP250书单HTTP请求与响应的本质。HTML解析的核心技巧。反爬虫的基本应对策略。数据清洗与存储的完整流程。爬虫是通往数据世界的一把钥匙。现在,钥匙在你手中,去探索更多有趣的数据吧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 544

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

先从头到尾遍历链表,得到链表的长度count,结点编号从1开始起算的话,第(count - n + 1)个结点就是要删除的结点。leetcode官方题解,给出的办法是再遍历一次,遍历到第count-n+1个结点就可以做删除操作了。我用的是用空间换时间,第一次遍历的时候用哈希表把所有结点的地址存起来,哈希键就是结点的序号,这样就不用第二次遍历链表,但同时增加了空间开销。题目说结点的数目是1到30个,所以哈希表ListNode* nodes[31]。

weixin_41554427的博客 708

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

力扣LeetCode第19题删除链表的倒数第N个结点

力扣LeetCode第19题删除链表的倒数第N个结点

weixin_44061444的博客 369

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

leetcode力扣19. 删除链表的倒数第 N 个结点

第二个就是指在像本题这种新建链表的题目中,为了避免表头判空问题提前new一个表头,值任意,习惯用-1。两个技巧,一个是寻找单链表倒数第k个节点,二是虚拟链表头。简化了labuladong的算法。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。第一个技巧详细描述在。只用了38.41MB。

weixin_43467758的博客 384

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

leetcode 力扣算法题 快慢指针 双指针 19.删除链表的倒数第n个结点

定义一个快指针和一个慢指针都先指向头结点,然后快指针先走n步,然后快、慢指针同时走,发现当快指针走到链表结尾的时候,慢指针就刚好走到了要删除结点的前一个结点,那么此时只需要将慢指针的next指向慢指针next的next即可完成删除操作(就本题来说可以忽略释放删除结点这个操作,当然释放一下也可以)

samroom的博客 866

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5输入:head = [1], n = 1输出:[]输入:head = [1,2], n = 1输出:[1]你能尝试使用一趟扫描实现吗?

Dubhehug的博客 362

双指针解leetCode19题“删除链表的倒数第 N 个结点”有感

双指针解leetCode19题“删除链表的倒数第 N 个结点”有感!列举了我做这道题的一些困惑,不知道大家有没有类似的感受。

Zlwjiayou的博客 1763

day18【LeetCode力扣】19.删除链表的倒数第N个结点

fast先走n+1步,这样同时移动的时候slow指向删除节点的上一个节点。看完题述后,链表只能从前往后查找,根据这个特点,想到使用。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。

canGfly的博客 647

链表之leetcode19:删除链表的倒数第N个结点

使用快慢指针删除链表的倒数第N个结点

weixin_44885503的博客 286

【c++】leetcode19 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 解法:快慢指针,快指针先走n步,第n+1步慢指针才开始走。等到快指针走到链表尾的时候,就走到需要被替换链表节点的前一位。然后通过->next = ->next->next。

聿默的博客 197

精选力扣500题 第53题 LeetCode 19. 删除链表的倒数第 N 个结点【c++/java详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 给你一个链表,删除链表的倒数第 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 <

林深不见鹿 的博客 2700

golang力扣leetcode 19.删除链表的倒数第N个结点

19.删除链表的倒数第N个结点19.删除链表的倒数第N个结点题解代码 19.删除链表的倒数第N个结点 19.删除链表的倒数第N个结点 题解 思路: 1.计算链表长度 1.计算链表长度 2.增加一个哑节点,遍历到倒数n+1的位置 2.栈存储节点 1.存储所有节点 2.倒数n+1的节点就是nodes[len(nodes)-1-n] 3.双指针 1.两个指针,步伐相同 2.快指针先移动n步 3.两个指针一起移动,直到快指针为nil 4.此时慢指针就是倒数n位置 代码 func removeNthFromEn

清风 834

力扣刷题19. 删除链表的倒数第 N 个结点

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

qq_51015052的博客 556

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

Python: 方法、while循环、for循环。Java:方法、while循环、for循环。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。

it爱好者的学习之路 544

leetcode力扣 19 删除链表的倒数第N个结点

首先开辟空间给dummy变量,以防头节点被删,使它插入到头节点前,并将值置为0.遍历完成后使遍历得最后一个结点next指向被删除的next,使头节点指向下一指针,返回长度值;计算出链表长度,遍历删除结点前的结点,使一一连接。定义删除结点函数,将头节点和N值传入。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。

CKROL的博客 136
上一篇: 力扣 3无重复字符的最长子串
下一篇: 力扣 66 加一
霜序0.2℃
博客等级 码龄7年 327粉丝 278原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值