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

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]

·解题思路

使用快慢指针,慢指针比快指针晚出发n步.如图所示,当快指针到达链表尾部的时候,slow指针刚好到达要删除的结点的前一个结点。此时的删除语句:   slow.next = slow.next.next

·Java代码

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode slow = head;ListNode fast = head;if(head.next == null) return null;while(fast.next != null){fast = fast.next;if(n != 0) n --;else slow = slow.next;}slow.next = slow.next.next;return head;}
}

但是上述代码存在的问题在于,当需要删除头结点的时候出现错误。因此为了删除头结点需要创建一个dummy空结点,dummy.next = head  这时候就可以删除头结点了。

·改进代码

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode slow = dummy;ListNode fast = dummy;if(head.next == null) return null;while(fast.next != null){fast = fast.next;if(n != 0) n --;else slow = slow.next;}slow.next = slow.next.next;return dummy.next;}
}

相关文章:

  • 如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据
  • 【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数
  • 【Linux】进程(8):Linux真正是如何调度的
  • Gradio.NET:一个快速制作演示demo网页的利器
  • 鸿蒙开发接口数据管理:【@ohos.data.preferences (首选项)】
  • 在Windows中使用svn的命令行
  • 【ARFoundation自学04】AR Tracked Image 图像追踪识别
  • 基于安卓的虫害识别软件设计--(1)模型训练与可视化
  • 关于安装typescript后运行tsc -v命令报错问题
  • idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具
  • HTML5 视频 Vedio 标签详解
  • 神经网络---网络模型的保存、加载
  • 分治算法例子
  • OceanBase v4.2 解读:tenant=all 语义优化,提升易用性
  • Java Web学习笔记4——HTML、CSS
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • angular2开源库收集
  • CSS盒模型深入
  • CSS实用技巧
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • leetcode讲解--894. All Possible Full Binary Trees
  • Mithril.js 入门介绍
  • Rancher-k8s加速安装文档
  • Shell编程
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue-router的history模式发布配置
  • 阿里云前端周刊 - 第 26 期
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 每天10道Java面试题,跟我走,offer有!
  • 目录与文件属性:编写ls
  • 如何设计一个微型分布式架构?
  • 智能合约Solidity教程-事件和日志(一)
  • AI算硅基生命吗,为什么?
  • Prometheus VS InfluxDB
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 说说我为什么看好Spring Cloud Alibaba
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (Java)【深基9.例1】选举学生会
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)JAVA使用POI操作excel
  • (分布式缓存)Redis分片集群
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)基于IDEA的JAVA基础10
  • (转)【Hibernate总结系列】使用举例
  • (转载)从 Java 代码到 Java 堆
  • .naturalWidth 和naturalHeight属性,
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net中应用SQL缓存(实例使用)
  • @JSONField或@JsonProperty注解使用
  • @Resource和@Autowired的区别