【CT】LeetCode手撕—19. 删除链表的倒数第 N 个结点

题目

  • 原题连接:19. 删除链表的倒数第 N 个结点

1- 思路

模式识别:删除倒数第 n 个结点 ——> 定义 dummyHead 并用双指针实现删除逻辑


2- 实现

⭐19. 删除链表的倒数第 N 个结点——题解思路

在这里插入图片描述

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null){
            return head;
        }
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode fast = dummyHead;
        ListNode slow = dummyHead;
        for(int i = 0 ; i < n ; i++){
            fast = fast.next;
        }

        while(fast.next!=null){
            slow = slow.next;
            fast = fast.next;
        }

        slow.next = slow.next.next;
        return dummyHead.next;
    }
}

3- ACM实现

public class removeLastN {

    static class ListNode{
        int val;
        ListNode next;
        ListNode(){}
        ListNode(int x){
            val = x;
        }
    }

    public static ListNode removeLast(ListNode head,int n ){
        // 双指针
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode slow = dummyHead;
        ListNode fast = dummyHead;

        for(int i = 0 ; i < n ;i++){
            fast = fast.next;
        }

        while(fast.next!=null){
            slow = slow.next;
            fast = fast.next;
        }

        slow.next = slow.next.next;
        return dummyHead.next;
    }

    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        System.out.println("输入链表长度");
        int n = sc.nextInt();
        System.out.println("输入链表元素");
        ListNode head = null,tail = null;
        for(int i = 0 ; i < n;i++){
            ListNode newNode = new ListNode(sc.nextInt());
            if(head==null){
                head = newNode;
                tail = newNode;
            }else{
                tail.next = newNode;
                tail = newNode;
            }
        }
        System.out.println("输入删除倒数第几个元素");
        int k = sc.nextInt();
        ListNode Res = removeLast(head,k);
        while(Res!=null){
            System.out.print(Res.val+" ");
            Res = Res.next;
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FormMaking表单设计器V3.8发布,数据表格上线,支持多选、多级表头、列模板自定义、操作列、分页等设置

介绍 FormMaking 是基于Vue的可视化表单设计器&#xff0c;赋能企业实现可视化低代码开发模式&#xff1b;帮助开发者从传统枯燥的表单代码中解放出来&#xff0c;更多关注业务&#xff0c;快速提高效率&#xff0c;节省研发成本。 目前已经在OA系统、考试系统、报表系统、流程…

python本学期所有代码!

第一单元 ----------------------------------------------------------------------- #圆面积的计算 radius 25 area 3.1415 * radius * radius print(area) print("{:.2f}".format(area)) --------------------------------------------------------------------…

【C语言】分支(选择)和循环语句

目录 简述选择语句简述if语句单if结构语法格式 if-else结构语法结构 语法结构 循环结构break和continuewhile循环语法结构 for循环语法结构 do while循环语法结构 简述 在c语言中分支和循环语句是极其重要的&#xff0c;就像生活中你难免要做一些判断和循环往复做一些事。 选…

ESP8266[ 关于-巴发云MQTT/TCP:arduino 设置回调函数 ] 日志2024/6/29

ESP8266 [ 关于-巴发云MQTT/TCP:arduino 设置回调函数 ] 日志2024/6/29 arduino库:#include <PubSubClient.h> 回调函数 是其库设置好的 可以改名字 这里只写上关键代码 设置客户端为 A 关键代码: A.setCallback(回调名) //MQTT 回调处理mqttmsgg(自定义…

el-scrollbar组件使用踩坑记录

一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示&#xff0c;使用el-scrollbar组件后&#xff0c;发现未能成功替换掉浏览器原生导航条&#xff0c;二者同时出现。 引发原因 el-scrollbar的height属性如果…

idea常用问题记录

文章目录 1.ant构建报错编译错误1.1 解决办法 1.ant构建报错编译错误 Compile failed;xxx 1.1 解决办法

如何通过指纹浏览器使用代理IP?

1.指纹浏览器定义 指纹浏览器是 一种浏览器技术&#xff0c;它根据用户设备的硬件、软件和配置等特征生成唯一标识符&#xff08;称为“指纹”&#xff09;。此指纹用于识别和追踪用户身份&#xff0c;即使用户更改其 IP 地址或清除浏览器数据&#xff08;如缓存和 Cookie&…

仓库管理系统带万字文档基于spingboot vue的前后端分离仓库管理系统java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 仓库管理系统 二、项目介绍 基于spingboot和vue的前后端分离仓库管…

【工具】VS Code使用global插件实现代码跳转

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;善假于物&#…

Android SQLite 数据库存学习与总结

Android 系统内置了一个名为 SQLite 数据库。那么 SQLite 是一种什么样的数据库&#xff0c;它有那些特点&#xff0c;应该怎么操作它&#xff1f;下面&#xff0c;让我们就来认识一下它吧。 1、概念&#xff1a; SQLite 是一种轻量级的关系型数据库&#xff0c;它不仅支持标准…

C++ (第二天下午---面向对象之类与对象)

一、面向过程与面向对象 1、面向过程 面向过程是一种以事件为中心的编程思想&#xff0c;编程的时候把解决问题的步骤分析出来&#xff0c;然后用函数把这些步骤实现&#xff0c;在一步一步的具体步骤中再按顺序调用函数。 举个例子&#xff0c;下五子棋&#xff0c;面向过程…

通过docker overlay2 目录名查找占用磁盘空间最大的容器名和容器ID

有时候经常会有个别容器占用磁盘空间特别大&#xff0c; 这个时候就需要通过docker overlay2 目录名查找占用磁盘空间最大的容器名和容器ID&#xff1a; 1、 首先进入到 /var/lib/docker/overlay2 目录下,查看谁占用的较多 [rootPPS-97-8-ALI-HD1H overlay2]# cd /var/lib/doc…

Vue 全局状态管理新宠:Pinia实战指南

文章目录 前言全局状态管理基本步骤&#xff1a;pinia 前言 随着Vue.js项目的日益复杂&#xff0c;高效的状态管理变得至关重要。Pinia作为Vue.js官方推荐的新一代状态管理库&#xff0c;以其简洁的API和强大的功能脱颖而出。本文将带您快速上手Pinia&#xff0c;从安装到应用&…

【C语言】bool 关键字

在C语言中&#xff0c;bool类型用于表示布尔值&#xff0c;即真或假。C语言本身在标准库中并未提供布尔类型&#xff0c;直到C99标准引入了stdbool.h头文件。该头文件定义了bool类型&#xff0c;以及两个常量&#xff1a;true和false。在此之前&#xff0c;通常使用整数来表示布…

[方法] 为Cinemachine添加碰撞器

选中场景中的Cinemachine物体&#xff0c;在 Inspector 面板的最下方单击 Add Extension 下拉框&#xff0c;选择 CinemachineCollider。 之后在添加的碰撞器组件中选择要与之碰撞的层&#xff08;Collide Against&#xff09;和忽略的层&#xff08;Transparent Layers&#x…

配置atuin记录

https://atuin.sh/ 运行 curl --proto https --tlsv1.2 -LsSf https://setup.atuin.sh | sh报错 $ curl --proto https --tlsv1.2 -LsSf https://setup.atuin.sh | sh curl: (77) error setting certificate verify locations:CAfile: /etc/ssl/certs/ca-certificates.crtCAp…

2025中国淄博化工展|淄博化工技术展|淄博化工装备展

CTEE2025第九届中国&#xff08;淄博&#xff09;化工技术装备展览会 时间&#xff1a;2025年5月16-18日 地点&#xff1a;山东淄博国际会展中心 主办单位:山东省机械工业科学技术协会 青岛蓝博国际会展有限公司 众所周知&#xff0c;山东省是我国化工大省。2023年上半年&am…

Unity 动画事件

Unity中的动画事件是一种在动画播放过程中触发自定义行为的方法。动画事件允许开发者在动画的特定时间点执行代码&#xff0c;例如播放声音、改变游戏状态或触发其他动画。以下是使用Unity动画事件的一些关键点&#xff1a; 动画事件的创建&#xff1a;在Unity的Animation窗口…

Linux kfence使用与实现原理

0 背景 为了更好的检测linux kernel中内存out-of-bounds、mem-corruption、use-after-free、invaild-free等问题&#xff0c;调研了kfence功能&#xff08;该功能在linux kernel 5.12引入&#xff09;&#xff0c;帮助研发更好的分析与定位这类内存错误的问题。 一、kfence介…

【Unity 人性动画的复用性】

Unity的动画系统&#xff0c;通常称为Mecanim&#xff0c;提供了强大的动画复用功能&#xff0c;特别是针对人型动画的重定向技术。这种技术允许开发者将一组动画应用到不同的角色模型上&#xff0c;而不需要为每个模型单独制作动画。这通过在模型的骨骼结构之间建立对应关系来…