news 2026/10/16 9:15:28

【链表-7】19.删除链表的倒数第N个结点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【链表-7】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]

解题思路:

方法一:暴力解法

我的思路:先把链表的值按顺序存入 vector,删除倒数第 n 个,再用剩下的值重建一个新链表。

具体步骤:

  1. 边界处理:如果链表只有一个节点,直接返回nullptr

  2. 取值:遍历链表,把所有值存入temp

  3. 删除:从temp中删除倒数第 n 个

  4. 重建:用temp中的值新建链表节点,连接成新链表

  5. 返回:返回新链表的头节点

用例子走一遍:

head = 1 -> 2 -> 3 -> 4 -> 5,n = 2

步骤操作结果
1遍历链表temp = [1, 2, 3, 4, 5]
2删除倒数第2个(下标 5-2=3)temp = [1, 2, 3, 5]
3重建链表1 -> 2 -> 3 -> 5
4返回1 -> 2 -> 3 -> 5✅

代码实现:

class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(head->next==nullptr) return nullptr; vector<int> temp; while(head!=nullptr){ temp.push_back(head->val); head=head->next; } temp.erase(temp.begin() + (temp.size() - n)); ListNode* h=nullptr; ListNode* t=nullptr; for(int x:temp){ ListNode* node=new ListNode(x); if(h==nullptr){ h=node; t=node; } else{ t->next=node; t=node; } } return h; } };

复杂度分析:

维度复杂度说明
时间复杂度O(n)遍历链表一次 O(n) + 重建链表一次 O(n)
空间复杂度O(n)temp存储 n 个值 + 新建 n-1 个节点

缺点:

  1. ❌空间复杂度 O(n):需要额外存储所有值和新建所有节点

  2. ❌没有利用链表的特性:链表题应该用指针操作,而不是转成数组

方法二:快慢指针(O(1) 空间)

核心思路:

  • fast先走n+1步

  • fast和slow同时走,当fast到末尾时,slow正好在要删除节点的前一个

  • 直接slow->next = slow->next->next完成删除

代码实现:

class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy = new ListNode(0); dummy->next = head; ListNode* fast = dummy; ListNode* slow = dummy; // fast 先走 n+1 步 for (int i = 0; i <= n; i++) { fast = fast->next; } // fast 和 slow 同时走 while (fast != nullptr) { fast = fast->next; slow = slow->next; } // 删除 slow->next slow->next = slow->next->next; return dummy->next; } };

复杂度:

  • 时间 O(n)
  • 空间 O(1)

两种方法的对比:

对比维度暴力解法最优解法(快慢指针)
时间复杂度O(n)O(n)
空间复杂度O(n)O(1)
是否新建节点✅ 需要 new n-1 个❌ 不需要
是否修改原链表❌ 不修改✅ 修改
代码长度较长中等
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 9:14:58

DataForSEO MCP 服务说明文档

1. 服务概述一句话简介&#xff1a;一个提供标准化接口访问多个SEO相关API的MCP服务器&#xff0c;用于全面的数据检索和分析&#xff0c;支持SERP、关键词研究、反向链接分析等功能。服务名称&#xff1a;DataForSEO MCP Server版本号&#xff1a;最新版本开发者/提供方&#…

作者头像 李华
网站建设 2026/10/16 9:14:32

Apollo Portal批量变更Item源码解析:从校验到发布的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 9:13:37

IMX6UL主频与时钟配置实战:从PLL到设备树的完整指南

拿到一块IMX6UL板子&#xff0c;我习惯先问三个问题&#xff1a;DDR跑多少、ARM主频是多少、外设时钟是谁给的。原因很简单&#xff0c;这三个数字决定了一个系统能不能跑得稳、跑得快、跑得省电。主频与时钟配置这事&#xff0c;表面上看只是填几个寄存器&#xff0c;实际上牵…

作者头像 李华
网站建设 2026/10/16 9:12:29

线性回归从入门到实战:一元与多元回归的完整指南

1. 从一条散点图说起&#xff1a;回归到底在解决什么问题很多人第一次接触机器学习&#xff0c;都是从线性回归开始的。原因很简单&#xff0c;它足够直观&#xff0c;也足够有用。但我在带新人的过程中发现一个普遍现象&#xff1a;大部分人能背出公式&#xff0c;能调用现成的…

作者头像 李华
网站建设 2026/10/16 9:10:55

Olares 高级设置实战:仓库镜像源管理、镜像查看与系统日志导出

云原生后端运维 【免费下载链接】Terminus Open-Source Personal Cloud OS for Always-On Agents 项目地址&#xff1a; https://gitcode.com/gh_mirrors/terminus2/Terminus 点击查看 免费下载 在 Olares 的设置 > 高级页面中&#xff0c;集中提供了与系统运行维护相关的三…

作者头像 李华