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

力扣刷题笔记-删除链表的倒数第N个结点

力扣题目-删除链表的倒数第N个结点C++实现

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
在这里插入图片描述
分析:
这一题最重要的是怎么找到倒数第n个结点,因为链表的长度其实我们是不知道的,这里指向链表的指针只能单向移动,按一般的思路的话我们用指针只有遍历完一遍确定链表的长度之后,才能确定倒数第n个结点的位置,然后再从头开始遍历去找这个结点把它删掉。
这里可以使用一个巧妙的办法,就是使用双指针。我们可以分析一下如果链表的长度是lenth的话,用一个指针p指向第一个节点,那p移动多少次可以指向l倒数第N个结点呢?lenth-N次。看例子,lenth长度为5,指向第一个节点的p移动5-2=3次之后恰好指向4也就是倒数第二个结点。然后这里再设置一个指针q,刚开始的时候让指针q指向第一个结点,然后向右移动N,此时p和q的距离也是N。比如例子里边刚开始p指向1,那么就把q放在位置3。
在这里插入图片描述

然后让p和q同时往右边移动,直到q指向空的时候看看是什么状态。
在这里插入图片描述
这个时候q刚好是从第N个位置移到了空位置,相当于移动了lenth-N次,这时候我们发现p也就是跟着移动了lenth-N次。前面我们怎么分析的?p移动多少次可以指向l倒数第N个结点呢?lenth-N次,所以这时候恰好p指向的那个结点就是我们要删除的结点了。这个例子里,p和q都移动了3次,此时p恰好指向要删除的结点4。
另外还需要注意的是,我们还需要一个pre结点指向p前面的结点以便执行删除操作。我们删除的结点有可能是第一个结点,那么这时候pre就不好弄了,不知道怎么指,所以为了更好地操作,可以先生成一个虚拟头结点dummyHead, 作为 “临时起点”,可以直接把链表挂在后面,这样操作起来就更加方便。
在这里插入图片描述
pre ,p , q都向右移动,直到q指向空的时候停下来,这时候p指向了要删除的那个结点,然后pre->next=p->next,完成结点的删除,最后直接返回dummyHead->next就是删除后的链表。
在这里插入图片描述

class solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* pre = dummyHead;ListNode* p = head;ListNode* q=head;for (int i = 0; i < n; i++) {q = q->next;//把q移动n次}while (q) {//q没指向空就一直操作q = q->next;pre = p;p = p->next;}pre->next = p->next;//删除结点return dummyHead->next;}
};

文章转载自:

http://lxZ4CugU.tqtcL.cn
http://FfA5MhKC.tqtcL.cn
http://7e8nWtDe.tqtcL.cn
http://tmO5PFPE.tqtcL.cn
http://mQN3HAnW.tqtcL.cn
http://PxWOW5u2.tqtcL.cn
http://fYmknaUs.tqtcL.cn
http://LgMsFOEr.tqtcL.cn
http://gEsTTlIz.tqtcL.cn
http://hTx5YQmQ.tqtcL.cn
http://7nNPTDXj.tqtcL.cn
http://xbqq19cQ.tqtcL.cn
http://47hxxT3d.tqtcL.cn
http://pleUaBc8.tqtcL.cn
http://U3hBCcqd.tqtcL.cn
http://JPt5Vs52.tqtcL.cn
http://K9pHmRsM.tqtcL.cn
http://rgtxPILm.tqtcL.cn
http://vwccwIo1.tqtcL.cn
http://D2I9SmsB.tqtcL.cn
http://CPcfWD6j.tqtcL.cn
http://D0Z8r8OJ.tqtcL.cn
http://L5SqOFT9.tqtcL.cn
http://V144zXXE.tqtcL.cn
http://u7gMiBD8.tqtcL.cn
http://grYIwMcy.tqtcL.cn
http://86pYesYU.tqtcL.cn
http://gYYsycYi.tqtcL.cn
http://0TJ4IYiy.tqtcL.cn
http://AdYQ914g.tqtcL.cn
http://www.dtcms.com/a/381524.html

相关文章:

  • 代码审计-PHP专题原生开发SQL注入1day分析构造正则搜索语句执行监控功能定位
  • dots.llm1:小红书开源的 MoE 架构大语言模型
  • --gpu-architecture <arch> (-arch)
  • uniapp动态修改tabbar
  • Spring Boot 集成 Flowable 7.1.0 完整教程
  • 教你使用服务器如何搭建数据库
  • Kafka如何配置生产者拦截器和消费者拦截器
  • uniapp:根据目的地经纬度,名称,唤起高德/百度地图来导航,兼容App,H5,小程序
  • 欧拉函数 | 定义 / 性质 / 应用
  • 【更新至2024年】1996-2024年各省农业总产值数据(无缺失)
  • 财报季观察|消费“分野”,燕之屋(1497.HK)们向上生长
  • 机械制造专属ERP:降本增效与数字转型的关键
  • 基于node.js+vue的医院陪诊系统的设计与实现(源码+论文+部署+安装)
  • 【大语言模型 59】监控与日志系统:训练过程全面监控
  • HIS架构智能化升级编程路径:从底层原理到临床实践的深度解析(下)
  • Node.js中package.json详解
  • 当AI遇上数据库:Text2Sql.Net如何让“说人话查数据“成为现实
  • 数据结构8——双向链表
  • 问卷系统自动化测试报告
  • Python 的函数柯里化(Currying)
  • 渗透测试信息收集详解
  • 【连载3】C# MVC 异常日志进阶:结构化日志与性能优化技巧
  • 冯诺依曼体系:现代计算机的基石与未来展望
  • 关于在阿里云DMS误操作后如何恢复数据的记录
  • 贪心算法应用:神经网络剪枝详解
  • 灵活学习PyTorch算法:从动态计算图到领域最佳实践
  • [code-review] 部署配置 | Docker+PM2 | AWS Lambda | Vercel+边缘函数
  • 递归,搜索与回溯算法
  • 31.网络基础概念(一)
  • 贪心算法应用:信用卡还款优化问题详解