leetcode19_删除链表的倒数第 N 个结点

news2025/2/25 18:14:17

文章目录

  • 题目详情
  • 分析
  • Java代码实现

题目详情

leetcode19
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
在这里插入图片描述

分析

暴力的方法,两趟遍历,第一个遍历记录总的节点数目,第二次遍历到总结点数-N个位置,开始删除即可。
当然啦,暴力的方法,还是不可取的嘛。
那就一趟遍历解决问题咯。
使用快慢双指针的方式,注意,在链表的题目中经常使用到快慢双指针策略解题。
具体说来:
1、最开始初始化,快慢指针同时指向开始节点;
2、快指针先走N步,这样快慢指针之间就差着N步啦,可以理解,如果此时的快指针指向末尾了,那么删除倒数第N个指针是不是就是把慢指针对应节点删除就可以嘞,如果快指针没有指向末尾,那么就接着执行第三步
3、快慢指针同时向前移动,直到快指针指向末尾,此时慢指针就是倒数第N个节点。

还是画两个图看一下吧:
情形一,直接到末尾:
在这里插入图片描述
情形二:没有到末尾,还需同时往前移动
在这里插入图片描述
这里比较粗狂的解释了思想,掌握这种思想就可以了,具体细节,看代码。

Java代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode pre = head;
        ListNode p1 = head;
        ListNode p2 = head;
        int i = 0;
        while(p2 != null) {
            while(i < n) {
                p2 = p2.next;  // 先提前走n步
                i++;
            }
            if (p2 == null) {
                head = head.next;
                return head;
            } else {
                pre = p1;
                p1 = p1.next;
                p2 = p2.next;
            }
        }
        pre.next = pre.next.next;
        return head;
    }
}

对于单链表的基础知识,可以参见这篇博客单链表——你需要掌握的那些内容

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

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

相关文章

PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算

PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算 前言官方示例控制多个CPU/GPU/TPU简单说一下设备环境导包加载数据 FashionMNIST创建一个简单的CNN模型训练函数-只包含训练训练函数-包含训练和验证训练 参考链接 前言 CPU&#xff1f;GPU&#xff1f;TPU&#xff…

边学边记——数据结构☞关于对象的比较(包括对equals()方法的重写,Comparable接口,Comparator接口的介绍)

目录 一、基本类型 二、引用类型——对象的比较 1. 关于同一性的比较 2. 关于相等性的比较 三、Comparable接口 1. 介绍 2. 实现 3. 什么叫做正确的compareTo方法的重写 四、实现Comparator接口&#xff08;基于比较器比较&#xff09; 1. 介绍 2. 实现 3. 使用场景…

CentOS防火墙的常用快捷命令

CentOS是免费开源的Linux发行版之一,它兼容RHEL并由社区进行维护,大多数美国服务器提供对该系统支持。在使用CentOS系统时,您需要了解一些常用命令,比如开启、查看、关闭防火墙等。本文将介绍下CentOS防火墙的常用命令。 CentOS是一种面向企业级服务器环境的Linux发行版,…

D触发器仿真实验

关于D触发器的内容见专栏的单片机原理及应用&#xff0c;主要是时钟脉冲出现时候&#xff0c;会改变输出状态。 下面来做一个D触发器的仿真实验。 部件 使用74LS74&#xff1a;带清除和预置端功能的双上升沿D型触发器 74LS74是一款现代集成电路芯片&#xff0c;属于TTL&…

火爆全网,测试用例技巧-Python实现XMind测试用例转Excel测试用例

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化测试&#x…

Jenkins中Changelog插件使用

Jenkins中Changelog插件使用 通过changlog插件获取每次提交的变更信息 一、安装changelog插件 二、使用changelog 1、新建项目&#xff0c;在构建环境中勾选Add Changelog Information to Environment &#xff0c;输入对应的格式 %3$s(datetime-at%4$s via%1$s) %2$s(type%…

聚焦智慧燃气,美格智能亮相第25届中国国际燃气、供热技术与设备展览会

4月25~27日&#xff0c;第25届中国国际燃气、供热技术与设备展览会在深圳会展中心&#xff08;福田&#xff09;盛大举办。本次展会由中国城市燃气协会主办&#xff0c;自1994年举办以来已历经24届&#xff0c;是国内燃气行业规模巨大的综合性专业展会。美格智能携4G/5G模组、N…

Typora中的数学公式(MarkDown)

Typora中的数学公式&#xff08;MarkDown&#xff09; 添加数学公式方式&#xff1a; 1.选择&#xff1a;段落>公式 2.快捷键&#xff1a;Ctrl Shift M 3.直接输入两个美元符号并回车 展示&#xff1a; 空格&#xff1a;一个斜线\ : a \ b a b a \ b a b 换行&#x…

【河南省第二届技能大赛-物联网技术】C模块Python开发讲解

文章目录 前言题目如下什么是云平台APIAPI调用的基本流程Python实例介绍依赖库介绍API调用的基本参数请求返回值requests库PyQt5库总结源码链接 前言 这是基于样题进行讲解的文章&#xff0c;因为正式赛题尚未公布和样题类型相似。文章结尾提供了源码和环境链接&#xff0c;读…

四面阿里,成功入职阿里测试开发,分享我的真实面试题

闲话少叙 直接上干货 鉴于篇幅所限&#xff0c;这里不放答案&#xff0c;有需要的朋友可以评论区自取 1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 2. 平时工作中是怎么去…

【面试题】你都必须得掌握的vue知识

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 大家好&#xff0c;我是前端贰货道士。最近抽空整理了下我对vue2.x的理解和认知&#…

设计师常用的素材网站有哪个推荐

即时设计资源社区聚集了许多优秀的创作者&#xff0c;分享了大量的优质资源。 目前&#xff0c;社区资源数量已达到10000&#xff0c;包含图标、插画、原型、设计作品等多个素材类别。这些优秀的设计作品降低了设计师思维的成本&#xff0c;成为设计师的宝藏材料网站。 即时设…

ML@sklearn@ML流程Part2@数据划分@KFold折叠交叉验证

文章目录 MLsklearnML流程Part2数据划分KFold折叠交叉验证Model evaluation数据划分sklearn中的模型评估demo K-fold cross-validation&#x1f388;K-foldegegeg:KFoldK-fold cross-validation ShuffleSpliteg 小结 Stratified Shuffle Splitegeg demo MLsklearnML流程Part2数…

代码随想录算法训练营第四十四天|完全背包理论基础 、518. 零钱兑换 II 、377. 组合总和 Ⅳ

文章目录 完全背包理论基础518. 零钱兑换 II377. 组合总和 Ⅳ 完全背包理论基础 纯背包问题的特点&#xff1a;每个物品可以无限次拿 与0-1背包唯一不同&#xff1a; 完全背包的物品是可以添加多次的&#xff0c;所以要从小到大去遍历 0-1背包不可以添加多次&#xff0c;需要从…

【C++】类和对象(上篇)

类和对象 面向过程和面向对象初步认识类的引入类的定义命名规范类的访问限定符及封装访问限定符封装 类的作用域类的实例化类的对象大小的计算类成员函数的this指针this指针的引出this指针的特性 面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#…

RocketMQ-Producer

消息生产者的代码都在client模块中&#xff0c;相对于RocketMQ来讲&#xff0c;消息生产者就是客户端&#xff0c;也是消息的提供者。 启动流程 代码&#xff1a;DefaultMQProducerImpl#start public void start(final boolean startFactory) throws MQClientException {switc…

轻松掌握消息队列RabbitMQ在SpringAMQP中的实践知识点

1、介绍 spring集成了rabbitmq&#xff0c;可以对rabbitmq先进行安装简单了解。参考我的rabbitmq文章。 2、使用 1、基本消息队列BasicQueue案例 一个消息消费者&#xff0c;上个消息未处理完&#xff0c;队列中的消息将阻塞&#xff0c;导致内存泄漏 1、引入AMQP依赖 2、添…

读书:《科技论文写作与发表教程(第6版)》

科技写作是指以符合标准格式的科技论文形式在科技期刊上陈述原创性的研究。 另外&#xff0c;还有广义上的科技写作。 科技写作的最主要特点是表达清晰。科技写作不需要漂亮的文学修饰&#xff0c;要把信息清楚地传递给读者。 IMRAD格式&#xff1a;Introduction Methods Re…

Redis常见问题整理

一、Redis使用场景相关问题 0. 单机版Redis部署 系统环境&#xff1a;CentOS7 1、下载Redis所需要的镜像 yum install -y gcc tcl2、下载redis安装包 mkdir /soft cd /soft wget https://download.redis.io/releases/redis-6.2.4.tar.gz3、解压缩&#xff1a; tar -xvf redi…

QT-DAY3

实现ui 字体、颜色、保存文件、打开文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮对应的槽函数 void Wid…