当前位置: 首页 > news >正文

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.jsqmd.com/news/259768/

相关文章:

  • 深度测评专科生必用TOP8AI论文软件:开题报告文献综述全攻略
  • Java毕设项目:基于springboot的旅行指南系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • Java毕设选题推荐:基于springboot的旅行指南攻略游记系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设项目:基于springboot的宠物医院管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 5.Spring Boot、Spring MVC 和 Spring 有什么区别
  • ssm489外婆家网上订餐平台--论文
  • 计算机Java毕设实战-基于SpringBoot + Vue的旅游出行指南系统基于springboot的旅行指南系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 6.Spring 是如何解决循环依赖问题的?
  • Java计算机毕设之基于springboot的旅行智能推荐、行程规划、活动管理指南系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【毕业设计】基于springboot的宠物医院管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • ssm490王道考研课程资料购物网站--论文
  • mysql系统级文件损坏修复
  • ssm491网上订餐系统09hbt--论文
  • 【毕业设计】基于springboot的旅行指南系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • java-SSM335的数字工坊课程教学笔记商城网站-springboot
  • 3.JDK动态代理和CGLib动态代理实现原理和两者的区别
  • 【课程设计/毕业设计】基于springboot的旅行指南系统整合目的地攻略、行程规划、景点推荐、美食住宿查询、旅行日记分享的设计与实现【附源码、数据库、万字文档】
  • 4.Mybatis中#{}和${}的区别是什么?
  • Java毕设项目推荐-基于springboot的宠物医院宠物信息、医疗服务管理系统的设计与实现【附源码+文档,调试定制服务】
  • ssm649网上书城图书销售商城vue带商家
  • php mongodb扩展
  • ssm645考试系统学生教师管理员vue
  • ssm650springboot高校党员党建党务系统vue
  • 【计算机毕业设计案例】基于springboot的宠物医院中小型宠物医院、连锁宠物诊疗机构管理系统的设计与实现(程序+文档+讲解+定制)
  • Android设备与Mac/Docker全连接指南:有线到无线的完整方案
  • 亲测好用!专科生毕业论文TOP8 AI论文网站测评
  • 解码MQTT协议与DHT11传感器
  • 基于微信小程序的日语学习系统【源码+文档+调试】
  • 基于微信小程序的音乐室预约系统【源码+文档+调试】
  • java-SSM329的四六级英语报名系统-springboot