day138—快慢指针—删除链表的倒数第N个结点(LeetCode-19)

题目描述

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

解决方案:

这段代码的核心功能是删除单链表中倒数第 n 个节点,采用「虚拟头节点 + 快慢指针」的经典方法实现,时间复杂度O(n)、空间复杂度O(1),能高效且优雅地处理删除头节点等边界情况。

核心逻辑

代码通过快慢指针制造n步的间距,让快指针先走到指定位置,再同步移动快慢指针,最终定位到倒数第 n 个节点的前驱节点,完成删除:

  1. 虚拟头节点初始化:创建虚拟头节点node并指向原链表头head,避免删除原头节点时的边界问题;
  2. 快慢指针拉开间距:快指针fast先从虚拟头节点出发,向前移动n步,此时快慢指针间距为n
  3. 同步移动找前驱:快慢指针同步向后移动,直到快指针走到链表末尾(fast->next为空),此时慢指针slow恰好指向「倒数第 n 个节点的前驱节点」;
  4. 删除目标节点:将慢指针的next指向其下下个节点,跳过倒数第 n 个节点,完成删除;
  5. 返回结果:返回虚拟头节点的next(即删除后的链表头)。

总结

  1. 核心思路:利用快慢指针的n步间距,将 “找倒数第 n 个节点” 转化为 “找正数的前驱节点”,避免先遍历统计长度的二次遍历;
  2. 关键设计:虚拟头节点解决了 “删除原链表头节点” 的边界问题,无需额外判断;
  3. 效率特点:仅一次遍历完成查找和删除,时间O(n),空间仅用几个指针,是该问题的最优解法。

函数源码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* node=new ListNode(); node->next=head; ListNode* slow=node; ListNode* fast=node; for(int i=0;i<n;i++){ fast=fast->next; } while(fast->next){ fast=fast->next; slow=slow->next; } //ListNode* nxt=slow->next; slow->next=slow->next->next; //delete nxt; return node->next; } };

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

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

相关文章

学霸同款2026 AI论文工具TOP8:本科生毕业论文神器测评

学霸同款2026 AI论文工具TOP8&#xff1a;本科生毕业论文神器测评 2026年学术写作工具测评&#xff1a;为什么需要一份权威榜单&#xff1f; 随着AI技术在学术领域的深入应用&#xff0c;越来越多的本科生开始依赖智能写作工具来提升论文效率与质量。然而&#xff0c;面对市场上…

深度测评专科生必用TOP8AI论文软件:开题报告文献综述全攻略

深度测评专科生必用TOP8AI论文软件&#xff1a;开题报告文献综述全攻略 2026年专科生论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着AI技术在学术领域的广泛应用&#xff0c;越来越多的专科生开始借助智能工具提升论文写作效率。然而&#xff0c;面对市场…

Java毕设项目:基于springboot的旅行指南系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设选题推荐:基于springboot的旅行指南攻略游记系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设项目:基于springboot的宠物医院管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

5.Spring Boot、Spring MVC 和 Spring 有什么区别

Spring Boot、Spring MVC 和 Spring 有什么区别Spring是⼀个IOC容器&#xff0c;⽤来管理Bean&#xff0c;使⽤依赖注⼊实现控制反转&#xff0c;可以很⽅便的整合各种框架&#xff0c;提供AOP机制弥补OOP的代码重复问题、更⽅便将不同类不同⽅法中的共同处理抽取成切⾯、⾃动注…

计算机Java毕设实战-基于SpringBoot + Vue的旅游出行指南系统基于springboot的旅行指南系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

ssm489外婆家网上订餐平台--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 摘要 随着互联网技术的快速发展和移动设备的普及&#xff0c;线上订餐平台已成为餐饮行业数字化转型的重要组成部分。本文以…

6.Spring 是如何解决循环依赖问题的?

Spring 是如何解决循环依赖问题的&#xff1f;1、什么是循环依赖 &#xff1f;一个或多个对象之间存在直接或间接的依赖关系&#xff0c;这种依赖关系构成一个环形调用&#xff0c;有下面 3 种方式。经典的循环依赖A中注入了一个B&#xff1b;Component public class A {Autowi…

Java计算机毕设之基于springboot的旅行智能推荐、行程规划、活动管理指南系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于springboot的宠物医院管理系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

ssm490王道考研课程资料购物网站--论文

目录具体实现截图SSM490王道考研课程资料购物网站论文摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 SSM490王道考研课程资料购物网站论文摘要 随着互联网技术的快速发展&#xff0c;在线教…

mysql系统级文件损坏修复

今天生成上的mysql突然报[ERROR] Can’t find messagefile ‘/usr/share/errmsg.sys’ 可能系统文件有损坏,进行排查后文件内容正常、权限正常、配置正常,最终使用重装mysql-community-common进行恢复 详细说明: sudo yum reinstall mysql-community-common 只是重新安装 My…

ssm491网上订餐系统09hbt--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 摘要 随着互联网技术的快速发展和移动设备的普及&#xff0c;网上订餐系统已成为现代餐饮行业的重要组成部分。该系统通过数…

【毕业设计】基于springboot的旅行指南系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

java-SSM335的数字工坊课程教学笔记商城网站-springboot

目录具体实现截图项目背景技术架构核心功能数据库设计部署与扩展教学价值系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 项目背景 Java-SSM335数字工坊课程教学笔记商城网站基于SpringBoot框架…

3.JDK动态代理和CGLib动态代理实现原理和两者的区别

JDK动态代理和CGLib动态代理实现原理和两者的区别面试题例子\AOP的例子\spring1、JDK动态代理JDK动态代理是基于Java反射机制实现的。在使用JDK动态代理时&#xff0c;被代理的对象必须实现一个或多个接口&#xff0c;代理对象的类型由接口类型决定。在运行时&#xff0c;JDK动…

【课程设计/毕业设计】基于springboot的旅行指南系统整合目的地攻略、行程规划、景点推荐、美食住宿查询、旅行日记分享的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

4.Mybatis中#{}和${}的区别是什么?

Mybatis中#{}和${}的区别是什么&#xff1f;#{}是预编译处理、是占位符&#xff0c; ${}是字符串替换、是拼接符 2Mybatis 在处理#{}时&#xff0c;会将 sql 中的#{}替换为?号&#xff0c;调⽤ PreparedStatement 来赋值 3Mybatis 在处理${}时&#xff0c; 就是把${}替换成变量…

Java毕设项目推荐-基于springboot的宠物医院宠物信息、医疗服务管理系统的设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…