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

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

删除链表的倒数第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]

解题思路

  • 如果我们需要用一次扫描就完成这个操作,那么我们首先想到的一定是需要多个指针(结点)互相配合,才有可能一次扫描删除指定结点的操作。
  • 那么继续思考,倒数第n个结点,输入会给出n的值,那么我们需要考虑的是怎么根据给出的这个n值来定位到我们的目标结点

从题目中的已知出发思考

寻找目标结点

  • 我们可以设想用两个指针来寻找目标结点,假设链表长度一共为lenth,倒数第n个就是正数第lenth-n+1个,那么也就是说需要一个指向头结点的指针从头结点开始走lenth-n步就走到了需要删除的那个结点。

条件转换

  • 上述的寻找思路我们发现需要遍历两次链表才能实现,但是在要求遍历一次时,我们就可以想到“快慢指针”(双指针)

核心思路

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

需要注意的点

  • 如果采用上面的思路操作的话,那么就会发现示例二是不能通过的,因为会出现野指针的问题。

改进建议

  • 创建一个前驱结点,快、慢指针都从前驱结点开始遍历,这样就可以成功的删除头结点并返回NULL了。

完整代码

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* prehead = new ListNode(0);prehead->next = head;ListNode* slow = prehead;ListNode* fast = prehead;while(n--){fast = fast->next;}while(fast->next!=nullptr){fast = fast->next;slow = slow->next;}slow->next = slow->next->next;return prehead->next;}
};

提交结果

在这里插入图片描述

http://www.lryc.cn/news/455133.html

相关文章:

  • 网络五层模型:物理层、数据链路层、网络层、传输层、应用层,分别解决了什么问题?
  • OpenCV视频I/O(18)视频写入类VideoWriter之初始化 VideoWriter 对象的函数open()的使用
  • 大数据处理从零开始————4.认识HDFS分布式文件系统
  • jwt认证课件讲解
  • 【判断推理】逻辑基础
  • AcWing 655:天数转换 ← 整除、求余
  • 【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
  • 算法笔记(十三)——BFS 解决最短路问题
  • Android 简单实现联系人列表+字母索引联动效果
  • 自动驾驶-问题笔记-待解决
  • 在掌控板中加载人教版信息科技教学指南中的educore库
  • 关于CSS Grid布局
  • 初始爬虫12(反爬与反反爬)
  • 成像基础 -- 最大对焦清晰的物距计算
  • win10服务器启动且未登录时自动启动程序
  • 算法专题四: 前缀和
  • 【Linux】基础IO(文件描述符、缓冲区、重定向)
  • 一篇文章快速学会docker容器技术
  • 【MySQL】使用 JDBC 连接数据库
  • 数据结构与算法笔记:概念与leetcode练习题
  • 十大时间序列预测模型
  • G2O 通过工厂函数类 OptimizationAlgorithmFactory 来生成固定搭配的优化算法
  • 手机USB连接不显示内部设备,设备管理器显示“MTP”感叹号,解决方案
  • SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?
  • RabbitMQ 入门到精通指南
  • ARM base instruction -- movz
  • 安装jdk安装开发环境与maven
  • openpnp - 图像传送方向要在高级校正之前设置好
  • 数据库建表规范【记录】
  • css的动画属性