删除链表的倒数第N个节点

news2024/9/23 15:23:15

题目描述

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

难度中等2410收藏分享切换为英文接收动态反馈

给你一个链表,删除链表的倒数第 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]

提示:

  • 链表中结点的数目为 sz

  • 1 <= sz <= 30

  • 0 <= Node.val <= 100

  • 1 <= n <= sz

普通思路:

思路:1.首先定义一个头节点dummy(有人知道为什么要定义这个头节点吗?答案是:因为我们不知道第一个元素是不是要删除的第N个元素 所以要建立一个头节点。如果没理解 那就结合下面代码 看看第一个节点之后的节点是怎么删除的)

2.接着创建一个指针 cur ,

3.让cur指向被删元素的前一个结构体地址 再将删除元素后面的地址赋给删除元素前一个地址(跳过被删除元素)

4.最后返回头节点地址,最后一步是有点多余。

int Length(struct ListNode* head)
{
    int len = 0;
    while(head)
    {
        len++;
        head = head->next;
    }
    return len;
}

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode* dummy = malloc(sizeof(struct ListNode));
    dummy->val = 0,dummy->next = head;
    int len = Length(head);
    struct ListNode* cur = dummy;
    for(int i = 1;i<len-n+1;i++)
    {
        cur = cur->next;
    }
    cur->next = cur->next->next;
    struct ListNode* ans = dummy->next;
    return ans;
}

快慢指针

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode *quick = head, *slow = head;
    int i;

    for (i = 0; i <= n && quick; ++i)//先让快指针先走n步
        quick = quick->next;
    if (i <= n)//如果倒数第n个节点的大小 大于i 
    {
        head = head->next;
        return head;
    }
    //快慢指针同时走 那个慢指针就在被删节点的前面
    while (quick) {
        slow = slow->next;
        quick = quick->next;//关键在这 如果理解 就没问题
    }
    slow->next = slow->next->next;//这个代码实现方式和第一个代码实现方式不一样 我感觉基本思路都一样
    return head;
}

总结:以上两个代码只是实现方式不太一样 我认为思想是一样大(将被删元素跳过 将被删元素的前后节点相连接)

如果老铁有其他解法 相互分享~

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

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

相关文章

【ROS】Windows系统安装ROS体验

大家平时玩ROS都是在Ubuntu系统上&#xff0c;那Windows系统可以安装吗&#xff0c;答案是&#xff1a;可以的&#xff01;Windows为了发展自家的物联网生态&#xff0c;已经在Windows系统支持ROS了。 文章目录1.安装VS 20172.安装Chocolatey & Git3.安装ROS4.运行ROS例程1…

RabbitMQ核心内容:实战教程(java)

文章目录一、安装二、入门1.分类2.核心概念3.工作原理4.六大模式三、模式一&#xff1a;"Hello World!"1.依赖2.生产者代码3.消费者代码四、模式二&#xff1a;Work Queues1.工作原理2.工具类代码&#xff1a;连接工厂3.消费者代码4.生产者代码5.分发策略不公平分发预…

计算机网络第2章(物理层)学习笔记

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

Metasploit 使用篇

文章目录前言一、msfconsole启动msfconsole命令分类核心命令模块命令作业命令资源脚本命令后台数据库命令二、使用案例更改提示和提示字符运行shell命令信息收集&#xff1a;HTTP头检测前言 理解了Meatasploit框架架构、原理之后&#xff0c;自然就很好理解它的使用逻辑 find…

springmvc java ssm药店库存进销存管理系统带前台

基于JSP技术、SSM框架、B/S机构、Mysql数据库设计并实现了龙康药店管理系统。系统主要包括药店简介管理、客户信息管理、药品信息管理、入库信息管理、出库信息管理、进货单管理等功能模块。其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#…

Games101-202作业1

一. 将模型从模型空间变换到世界空间下 在这个作业下&#xff0c;我们主要进行旋转的变换。 二.视图变换 ,将相机移动到坐标原点&#xff0c;同时保证物体和相机进行同样的变换&#xff08;这样对形成的图像没有影响&#xff09; 在这个作业下我们主要进行摄像机的平移变换&am…

【深度学习编译器系列】1. 为什么需要深度学习编译器?

本系列是自学深度学习编译器过程中的一些笔记和总结&#xff0c;参考文献在文末。 1. 概述 深度学习&#xff08;DL&#xff09;编译器的产生有两方面的因素&#xff1a;深度学习模型的广泛应用&#xff0c;以及深度学习芯片的层出不穷。 一方面&#xff0c;我们现在有非常多…

剑指 Offer 34. 二叉树中和为某一值的路径(java解题)

剑指 Offer 34. 二叉树中和为某一值的路径&#xff08;java解题&#xff09;1. 题目2. 解题思路3. 数据类型功能函数总结4. java代码1. 题目 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶…

关于MySQL的limit优化

1、前提 提示&#xff1a;只适用于InnoDB引擎 2、InnoDB存储特点 它把索引和数据放在了一个文件中&#xff0c;就是聚集索引。这与MyISAM引擎是不一样的。 3、SQL示例 -- 给cve字段建立索引 select * from cnnvd where cveCVE-2022-24808 limit 300000,10&#xff1b;由于M…

ACWING/1824. 钻石收藏家

输出格式 输出贝茜可以在展示柜中展示的钻石最大数量。 数据范围 1≤N≤1000 0≤K≤10000 钻石的尺寸范围 [1,10000]输入样例&#xff1a; 5 3 1 6 4 3 1输出样例&#xff1a; 4排序双指针 常规解法 将数据进行排序&#xff0c;形成一个有序单调增加的数组。然后左指针不…

【C语言每日一题】——猜凶手

【C语言每日一题】——猜名次&#x1f60e;前言&#x1f64c;猜凶手&#x1f64c;解题思路分享&#xff1a;&#x1f60d;解题源码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神…

Spring中的数据校验

数据校验基础 参考&#xff1a; Java Bean Validation 规范 Spring对Bean Validation的支持 Spring定义了一个接口org.springframework.validation.Validator&#xff0c;用于应用相关的对象的校验器。 这个接口完全从基础设施或者上下文中脱离的&#xff0c;这意味着它没有…

【Java基础】Java语言特性

认识Java java语言的执行过程 编写纯文本文件 .java 经过javac编译器(java complier)编译 .class .class是二进制的字节码 在源文件中定义几个类&#xff0c;就会生成几个 由JVM运行 .class JVM把字节码编译成可以在处理器上运行的高性能的本地代码&#xff08;native code),…

Linux进程概念(三)

环境变量与进程地址空间环境变量什么是环境变量常见环境变量环境变量相关命令环境变量的全局属性PWDmain函数的三个参数进程地址空间什么是进程地址空间进程地址空间&#xff0c;页表&#xff0c;内存的关系为什么存在进程地址空间环境变量 什么是环境变量 我们所有写的程序都…

SpringBoot升级到3.0

SpringBoot 3.0出来有一段时间了&#xff0c;一直没时间来整理&#xff0c;这次来看一下吧。 Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序&#xff0c;您可以“直接运行”。 SpringBoot升级到3.01. SpringBoot的维护时间线2. pom添加3. 打包大小对比4. 升…

GEE学习笔记 七十:【GEE之Python版教程四】Python基础编程二

通过上一章的讲解&#xff0c;我们对于python有了初步的了解&#xff0c;这一章就详细讲解一下python的各个变量以及运算规则等内容。 关于测试代码推荐初学者将每一段代码都自己敲入编辑器中在本地运行。 1、数值 这是任何编程中都会有的基本变量&#xff0c;在python支持的…

mac m1设备上安装Qt并使用qt编程遇到的问题以及解决方式

# 简介&#xff1a; 首先在M1平台上的程序可以看到有两种架构&#xff0c;分别是intel的&#xff08;x86-64&#xff09;和苹果的m1&#xff08;arm64架构&#xff09;&#xff0c;根据苹果的介绍&#xff0c;当在m1上面运行intel程序的时候使用的是转译的方式运行的&#xff…

设计模式(十)----结构型模式之适配器模式

1、概述 如果去欧洲国家去旅游的话&#xff0c;他们的插座如下图最左边&#xff0c;是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑&#xff0c;手机在当地不能直接充电。所以就需要一个插座转换器&#xff0c;转换器第1面插入当地的插座&#xff0c;第2面…

以太网详细解析

数据链路层&#xff1a;考虑相邻两个节点之间的传输&#xff08;通过网线/光纤/无线直接相连的两个设备&#xff09; 这里以数据链路层其中最知名的就是“以太网” 以太网帧格式&#xff1a; 以太网数据帧帧头载荷帧尾 帧头&#xff1a;目的地址、源地址、类型 目的地址和源…

51单片机简易电阻电感电容RLC测量仪仿真设计

51单片机简易电阻电感电容RLC测量仪仿真( proteus仿真程序讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0040 51单片机简易电阻电感电容RLC测量仪仿真51单片机最小系统的相关知识复位…