LeetCode 19:删除链表的倒数第N 个结点

news2024/12/28 14:56:50

题目:
在这里插入图片描述
地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/

方法一:
在这里插入图片描述

方法二:
在这里插入图片描述

代码:

package com.zy.leetcode.LeetCode_19;

/**
 * @Author: zy
 * @Date: 2024-12-25-13:01
 * @Description: 删除链表的倒数第N 个结点
 */
public class ListNode_19 {

    private int val;

    private ListNode_19 next;

    public ListNode_19(int val, ListNode_19 next) {
        this.val = val;
        this.next = next;
    }

    public ListNode_19() {

    }

    public ListNode_19 removeNthFromEnd(ListNode_19 head, int n) {
        //添加哨兵
        ListNode_19 s = new ListNode_19(-1, head);
        recursion(s, n);
        return s.next;
    }

    public ListNode_19 removeNthFromEnd2(ListNode_19 head, int n) {
        //添加哨兵
        ListNode_19 s = new ListNode_19(-1, head);
        ListNode_19 p1 = s;
        ListNode_19 p2 = s;
        // 先让p2 先走 n 步
        for (int i = 0; i < n; i++) {
            p2 = p2.next;
        }
        // 然后让p1 和 p2 同时前进,直到 p2 为 null
        while (p2 != null) {
            p1 = p1.next;
            p2 = p2.next;
        }
        // 删除 p1 所指的节点
        if (p1 != null && p1.next != null) {
            p1.next = p1.next.next;
        } else {
            p1 = null;
        }
        return s.next;
    }

    /**
     * 递归方式
     * 根据输入的节点,删除倒数numK 的值
     *
     * @param node 节点
     * @param numK 倒数第几
     * @return
     */
    private int recursion(ListNode_19 node, int numK) {
        if (node == null) {
            return 0;
        }
        //返回下一节点的位置
        int nth = recursion(node.next, numK);
        //进行判断
        if (nth == numK) {
            // 删除该节点
            if (node != null || node.next != null) {
                node.next = node.next.next;
            } else {
                node = null;
                return 0;
            }
        }
        return nth + 1;
    }

    public static void main(String[] args) {
        ListNode_19 node1 = new ListNode_19(1, null);
        //        ListNode_19 node2 = new ListNode_19(2, null);
        //        ListNode_19 node3 = new ListNode_19(3, null);
        //        ListNode_19 node4 = new ListNode_19(4, null);
        //        ListNode_19 node5 = new ListNode_19(5, null);

        //        node1.next = node2;
        //        node2.next = node3;
        //        node3.next = node4;
        //        node4.next = node5;
        while (node1 != null) {
            System.out.println(node1.val);
            node1 = node1.next;
        }
        System.out.println("------------");

        ListNode_19 result = new ListNode_19().removeNthFromEnd(node1, 1);
        ListNode_19 result1 = new ListNode_19().removeNthFromEnd(node1, 1);

        while (result1 != null) {
            System.out.print(result1.val + " -> ");
            result1 = result1.next;
        }

    }
}

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

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

相关文章

中学数学:一个函数值计算题

在数学的领域中&#xff0c;函数是一种描述变量之间关系的桥梁&#xff0c;它能够揭示出看似复杂现象背后的简洁规律。通过函数&#xff0c;我们可以预测、分析并解决实际问题。在这张图片中&#xff0c;我们看到了一位数学爱好者手写的解题过程&#xff0c;它展示了如何巧妙地…

kipotix4靶机实战

信息收集 1.判断靶机ip 原理&#xff1a;开靶机之前nmap扫一次网段&#xff0c;再开靶机之后扫一次&#xff0c;查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务&#xff0c;系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口&#xff1a;22,80,139,…

Xilinx FPGA的Bitstream比特流加密设置方法

关于Xilinx FPGA的Bitstream比特流加密设置方法更多信息可参阅应用笔记xapp1084。 使用加密bitstream分两个步骤&#xff1a; 将bitstream的AES密钥存储在FPGA芯片内将使用AES密钥加密的Bitstream通过SPI Flash或JTAG加载至FPGA芯片 AES密钥可以存储在两个存储区之一&#x…

菜鸟带新鸟——基于EPlan2022的部件库制作(3D)

设备逻辑的概念&#xff1a; 可在布局空间 中和其它对象上放置对象。可将其它对象放置在 3D 对象上。已放置的对象分到组件的逻辑结构中。 将此属性的整体标识为设备逻辑。可使用不同的功能创建和编辑设备逻辑。 设备的逻辑定义 定义 / 旋转 / 移动 / 翻转&#xff1a;组…

理解有放回和无放回抽样 (Python)

理解有放回和无放回抽样 (Python) 文章目录 一、说明二、放回抽样模型概念2.1 如何实现放回抽样2.2 使用 NumPy 进行替换抽样2.3 使用 Pandas 进行替换抽样 三、基本统计原理四、什么是无放回抽样4.1 使用 NumPy 进行无放回抽样4.1 数据科学中不重复抽样的例子 五、结论 一、说…

H5电子杂志制作工具推荐

什么样的电子杂志制作软件最好用呢&#xff1f;这里向大家介绍几款操作简易又稳定、功能满足工作的需求、效果非常精美大气的电子杂志制作软件。 1.FLBOOK&#xff1a;是一款专门为企业内刊、期刊设计的在线制作平台&#xff0c;用来制作企业电子期刊非常方便。它不需要下载安…

CAN201 Introduction to Networking(计算机网络)Pt.3 网络层

文章目录 4.Network Layter&#xff08;网络层&#xff09;4.1 Overview4.2 Router&#xff08;路由器&#xff09;4.3 Internet Protocol4.4 IPv4 addressing4.5 NAT&#xff08;network address translation&#xff0c;网路地址转换&#xff09;4.6 IPv64.7 Generalized For…

计算机网络——期末复习(4)协议或技术汇总、思维导图

思维导图 协议与技术 物理层通信协议&#xff1a;曼彻斯特编码链路层通信协议&#xff1a;CSMA/CD &#xff08;1&#xff09;停止-等待协议&#xff08;属于自动请求重传ARQ协议&#xff09;&#xff1a;确认、否认、重传、超时重传、 &#xff08;2&#xff09;回退N帧协…

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…

http 请求总结get

关于get请求传递body的问题 错误代码 有400 , 415 等情况 <!doctype html><html lang"zh"><head><title>HTTP Status 400 – 错误的请求</title><style type"text/css">body {font-family:Tahoma,Arial,sans-seri…

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…

Kubernetes 安装 Nginx以及配置自动补全

部署 Nginx &#xff1a; [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口&#xff1a; [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…

“库存管理软件的用户体验”:界面与交互设计

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该库存管理软件所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同…

基于openEuler22.09部署OpenStack Yoga云平台(一)

OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署&#xff0c;三个节点分别是控制节点&#xff08;controller&#xff09;、计算节点&#xff08;compute&#xff09;、存储节点&#xff08;storage&#xff09;&#xff0c;其中存储…

AutoDL服务器深度学习使用过程

前期准备 Xshell,Xftp,Pycharm专业版 step 1:实例开机&#xff08;无卡or有卡&#xff09;&#xff0c;Xshell连接 新建xshell会话&#xff1a; 登录指令格式为&#xff1a; ssh -p 38076 rootregion-1.autodl.com 在ssh -p 38076 rootregion-1.autodl.com命令中&#xff0…

【RabbitMQ的死信队列】

死信队列 什么是死信队列死信队列的配置方式死信消息结构 什么是死信队列 消息被消费者确认拒绝。消费者把requeue参数设置为true(false)&#xff0c;并且在消费后&#xff0c;向RabbitMQ返回拒绝。channel.basicReject或者channel.basicNack。消息达到预设的TTL时限还一直没有…

详解从输入url到页面渲染

当你在浏览器中输入一个 URL 并按下回车键&#xff0c;浏览器会经历一系列步骤来加载并渲染页面。这些步骤包括 DNS 解析、缓存处理、建立连接、发送请求、接收响应、解析 HTML、构建 DOM 树和 CSSOM 树、执行 JavaScript、布局和绘制等。以下是这些步骤的详细解释&#xff0c;…

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期&#xff0c;GitLab Inc. 针对其 SaaS 产品做了限制&#xff0c;如果被判定为国内用户&#xff0c;则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品&#xff08;GitLab.com&#xff09;迁移到极狐GitL…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

Python爬虫实战(保姆级登网页信息爬取教程)

此blog为爬虫实战教学&#xff0c;代码已附上&#xff0c;可以复制运行。若要直接看实战代码翻到博客后半部分。 本文使用selenium库进行爬虫&#xff0c;实现爬取数据操作&#xff0c;此库是通过模仿用户的操作进行对页面的处理。了解了这个思维模式&#xff0c;可以对代码进…