首页 > 其他分享 >19.删除链表的倒数第N个节点——学习笔记

19.删除链表的倒数第N个节点——学习笔记

时间:2023-03-25 22:35:57浏览次数:52  
标签:ListNode val 19 next 链表 int 节点 倒数第

题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点

示例 1
img

输入: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

题目来源:力扣(LeetCode)链接

题解

  • 自己做的
    /**
    * 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) {
            int size = 0;//首先遍历链表,记录链表的总长度
            ListNode countNode = head;
            while (countNode != null) {
                size++;
                countNode = countNode.next;
            }
            //定义一个虚拟头节点
            ListNode dummyNode = new ListNode(-1);
            dummyNode.next = head;
            //查找倒数第n个节点的前一个节点
            ListNode prevNode = dummyNode;
            for (int i = 0; i < size - n; i++) {
                prevNode = prevNode.next;
            }
            //删除该节点
            prevNode.next = prevNode.next.next;
            //返回链表的真实头节点
            return dummyNode.next;
        }
    }
    
  • 双指针法
    /**
    * 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 dummyNode = new ListNode(-1);
            dummyNode.next = head;
            //定义快指针和慢指针
            ListNode fastNode = dummyNode;
            ListNode slowNode = dummyNode;
            //让快指针前移n个,保证其与慢指针之间相隔n个节点
            for (int i = 0; i < n; i++) {
                fastNode = fastNode.next;
            }
            //快指针指向最后一个节点时,慢指针正好指向倒数第n个节点的前一节点,因为快慢指针之间始终相隔n个节点
            while (fastNode.next != null) {
                fastNode = fastNode.next;
                slowNode = slowNode.next;
            }
            //删除倒数第n个节点
            slowNode.next = slowNode.next.next;
            //返回链表的真实头节点
            return dummyNode.next;
        }
    }
    

标签:ListNode,val,19,next,链表,int,节点,倒数第
From: https://www.cnblogs.com/benben-home/p/17255567.html

相关文章

  • 2023-03-25 单链表LinkList的基本操作
    1#include<stdio.h>2#include<stdbool.h>3#include<malloc.h>4typedefstructLNode5{6intdata;7structLNode*next;8}LNod......
  • Josephu问题与单向环形链表
    Josephu问题与单向环形链表1.什么是约瑟夫问题(Josephu)Josephu问题的设定为:假设编号为1,2,...,n的n个人围坐成一圈,从编号为k(1≤k≤n)的人开始报数,当报至m时报m的这个人出......
  • Adobe Edge Animate 2019【An 2019】中文安装包下载及安装教程​
    AdobeAnimate是Adobe公司发布的,简称An,此软件的前身为AdobeFlashProfessional。此版本提供了增强缓动预设相机、图层深度增强、操作代码向导等实用功能,支持外新增HTML5创......
  • 链表的中间结点
     链表的中间结点 描述给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。  样例样例1:......
  • 部署SQL Server 2019 群集错误验证失败
    ##:部署WindowsCluster请参考之前相关文章。在之前文章部署群集时,我们使用无仲裁模式且未配置群集存储快速创建WinSrv群集,同时未进行群集测试验证。所以出现报错:问题描......
  • 块状链表
    块状链表基本概念块状链表本身是一个链表,但是链表储存的并不是一般的数据,而是由这些数据组成的顺序表。每一个块状链表的节点,也就是顺序表,可以被叫做一个块。块状链表是......
  • 【codevs3119】高精度开根号(二分答案)
    problem高精度开根号输入一个数求平方根solution二分答案,如果mid*mid>原数就去找更小的,反之找更大的。精度小于二忽略不计?用到高精加,高精乘,加低精,除低精,比较大小这几个......
  • 19
    建立一套以数据采集为基础,数据分析、统计、管控为核心的综合性能源管理系统,详细需求描述如下:1、数据收集功能:生产区域以车间为主体,通过计量仪表远程收集蒸汽、冷凝水、电、......
  • 题解:【COCI2019-2020#6】 Trener
    题目链接本人于三月二十四日模拟赛本题中使用\(\mathcalO(n^2k+nk^2)\)哈希+DP,因神秘常数原因竟打不过\(\mathcalO(n^2k^2)\),甚至被卡的TLE飞起,怒挂五十分。赛......
  • 电影数据集(豆瓣、爱奇艺、IMDB、腾讯视频、搜狐、1905)
    电影数据集(豆瓣、爱奇艺、IMDB、腾讯视频、搜狐、1905)爬虫爬取豆瓣、爱奇艺、IMDB、腾讯视频、搜狐、1905网,电影数据。获取方式:微信搜索关注【靠谱杨的挨踢生活】回复【......