删除链表的倒数第N个节点,剑指offerII(21),力扣

目录

题目地址:

题目:

相似类型题:

我们直接看本题题解吧:

解题方法:

难度分析:

解题分析:

解题思路(双指针):

代码实现:

代码说明:

代码实现(计算链表长度):

代码实现(栈): 


题目地址:

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

难度:中等

今天刷删除链表的倒数第N个节点,大家有兴趣可以点上看看题目要求,试着做一下

题目:

给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

相似类型题:

    强烈建议先做做这道题目,做完这道题,对下面题目的双指针解法会有更好的理解

链表中倒数第k个节点,剑指offer,力扣-CSDN博客

我们直接看本题题解吧:

解题方法:

方法1、计算链表长度(两次遍历,第一次求链表长度,第二次删除对应节点)

方法2、栈,(利用先进后出特点)

方法3、双指针(快慢指针)

难度分析:

总体上不是很难,主要是双指针的使用与理解

解题分析:

解题思路(双指针):

1、创建亚节点dummy(充当虚头结点),指向head

2、创建双指针,fast,slow,这里指针fast直接指向head,而指针slow需要指向被删除节点的上一个节点(不然被删节点后面节点也跟着被删了),因此需要初始化指向dummy节点

3、循环遍历,fast指针先走n步,然后fast与slow同步移动(此时二者相差n-1个节点),最后直到fast指向null,那么此时slow指向的是被删节点的前驱节点

4、最后返回链表,不过要注意是返回dummy.next即链表的第一个节点,如果返回head在特殊情况下会报错。

 

代码实现:

/**
 * 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; }
 * }
 */
 
 //这里first即fast,second即slow
          
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head); //创建亚节点
        ListNode first = head;
        ListNode second = dummy;
        for (int i = 0; i < n; ++i) {
            first = first.next;        //指针fast 先走n步
        }
        while (first != null) {
            first = first.next;
            second = second.next;     //fast 与slow同步移动,直至 fast指向null
        }
       //被删节点的上一节点的next指向被删节点的下一节点,即删除节点操作
        second.next = second.next.next;
        ListNode ans = dummy.next;
        return ans;//这里如果返回head的话,那么当链表只有一个元素并且删除一个元素的时候返回的不是空
    }
}
代码说明:

解题思路里讲的特殊情况,即链表只有一个元素时要删除这个元素,则会报错,所以保险起见,还是用设置头指针指向链表第一个结点的方式比较稳妥。

代码实现(计算链表长度):

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head);
        int length = getLength(head);
        ListNode cur = dummy;
        for (int i = 1; i < length - n + 1; ++i) {
            cur = cur.next;
        }
        cur.next = cur.next.next;
        ListNode ans = dummy.next;
        return ans;
    }

    public int getLength(ListNode head) {
        int length = 0;
        while (head != null) {
            ++length;
            head = head.next;
        }
        return length;
    }
}

代码实现(栈): 

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head);
        Deque<ListNode> stack = new LinkedList<ListNode>();
        ListNode cur = dummy;
        while (cur != null) {
            stack.push(cur);
            cur = cur.next;
        }
        for (int i = 0; i < n; ++i) {
            stack.pop();
        }
        ListNode prev = stack.peek();
        prev.next = prev.next.next;
        ListNode ans = dummy.next;
        return ans;
    }
}

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

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

相关文章

001-调用函数访问结构体数组成员,并修改其数值

1 代码 /*调用函数访问结构体数组成员&#xff0c;并修改其数值 */ #include <stdio.h> /* for printf */ #include <stdlib.h> /* for exit */struct mytest{char a ;char b ;char c ; };void p_find_test(struct mytest *aaa) {struct mytest *test aaa…

ubuntu改window任务栏

经常在ubuntu和win之间切换&#xff0c;任务栏的布局不统一会让人很别扭&#xff0c;个人很喜欢win任务栏的不折叠图标功能&#xff0c;而ubuntu没有&#xff0c;又很喜欢的ubuntu的多工作空间&#xff0c;效率比副屏还高&#xff0c;还可以自定义切换工作空间的快捷键。鱼和熊…

创新、诚信、共赢:湖北乾一律师事务所领航律师行业新发展

湖北乾一律师事务所: 一、引言 律师行业在现代社会中扮演着举足轻重的角色,为公民、法人和其他组织提供法律服务,维护法律权益,促进法治建设。湖北乾一律师事务所作为业内的佼佼者,凭借其专业素养、丰富经验和卓越声誉,成为了律师行业的典范。 二、湖北乾一律师事务所概况 …

振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(8)

注解目录 1、znFAT 的起源 1.1 源于论坛 &#xff08;那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。&#xff09; 1.2 硬盘 MP3 推了我一把 &#xff08;“坤哥”的硬盘 MP3 播放器&#xff0c;让我深陷 FAT 文件系统不能自拔。&#xff09; 1.3 我…

day66

今日回顾内容 web框架 django 路由控制 视图层 web框架 一、什么是web框架 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行…

osgFX扩展库-异性光照、贴图、卡通特效(1)

本章将简单介绍 osgFX扩展库及osgSim 扩展库。osgFX库用得比较多,osgSim库不常用&#xff0c;因此&#xff0c;这里只对这个库作简单的说明。 osgFX扩展库 osgFX是一个OpenSceneGraph 的附加库&#xff0c;是一个用于实现一致、完备、可重用的特殊效果的构架工具&#xff0c;其…

figma 基础使用——准备阶段

1. 注册账号 2. figma有客户端也有网页端&#xff0c;使用注意同步字体 之后点击下载window installeer 字体 3. 安装 Figma汉化包 通过figma.cool 网站&#xff0c;下载离线的汉化包 之后通过谷歌的扩展程序添加

Charles下载安装及配置之Mac

因工作需要用到抓包工具&#xff0c;但Fiddler不能在mac上使用&#xff0c;所以找到了Charles&#xff0c;Charles其实是一款代理服务器&#xff0c;通过过将自己设置成系统&#xff08;电脑或者浏览器&#xff09;的网络访问代理服务器&#xff0c;然后截取请求和请求结果达到…

WordPress自动采集伪原创发布工具

在当今数字化时代&#xff0c;随着信息爆炸式增长&#xff0c;网站内容的更新速度飞快。对于拥有WordPress网站的用户而言&#xff0c;如何轻松而又快速地批量采集伪原创内容成为一项具有挑战性的任务。本文将专心分享一些方法和技巧&#xff0c;帮助WordPress用户实现批量采集…

SpringBoot整合EasyExcel实现复杂Excel表格的导入导出功能

文章目录 &#x1f389;SpringBoot整合EasyExcel实现复杂Excel表格的导入&导出功能 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;架构设计&#x1f4dc;其他专栏&#xff1a;Java学习路线 Jav…

uniapp使用vue3和ts开发小程序获取用户城市定位

这个组件的功能&#xff1a;可以重新定位获取到用户的具体位置&#xff0c;这个是通过getLocation这个api和高德地图的api获取到的&#xff0c;getLocation这个api需要在微信公众平台后台>开发管理> 接口管理里面申请才能使用的&#xff0c;不然无法使用哦&#xff0c;这…

Python自动化办公:PDF文件的加密与解密

在本篇文章中&#xff0c;我们将介绍如何使用PyPDF2库对PDF文件进行加密和解密操作。 包括如何给PDF文件添加密码&#xff0c;以及如何从受密码保护的PDF文件中删除密码。 注&#xff1a;删除密码的操作&#xff0c;前提是需要知道密码哦 1. 安装PyPDF2库 首先&#xff0c;…

STM32之模数转换器ADC

目录 1、ADC介绍 1.什么是ADC&#xff1f; ADC的全称是Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 2.ADC的性能指标 3.ADC特性 12位分辨率 4.ADC通道 5.ADC转换顺序 6.ADC触发方式 7.ADC转化时间 8.ADC转化模式 9.模拟看门狗 实验&#xff1a;使用ADC读…

如何集成一个TypeScript开发环境?

首先要安装个node.js。Node.js (nodejs.org) 然后我们随便建一个文件夹&#xff0c;并且打开它运行到终端 然后再运行命令&#xff1a; npm install typescript -g 成功后 尝试使用 tsc -v 查看版本 接下来再使用命令&#xff1a; tsc --init 我们在.ts文件中尝试输出一些…

Docker智驾开发环境搭建

文章目录 背景1. 什么是容器?2. 什么是Docker?2.1 Docker架构3. 为什么要使用Docker?3.1 Docker容器虚拟化的好处3.2 Docker在开发和运维中的优势4. Docker容器与传统虚拟化的区别4.1 区别4.2 Docker的优势5. Docker的核心概念6. Docker在嵌入式开发中的应用7. docker实践参…

python炒股自动化(1),量化交易接口区别

要实现股票量化程序化自动化&#xff0c;就需要券商提供的API接口&#xff0c;重点是个人账户小散户可以申请开通&#xff0c;上手要简单&#xff0c;接口要足够全面&#xff0c;功能完善&#xff0c;首先&#xff0c;第一步就是要找对渠道和方法&#xff0c;这里我们不讨论量化…

Fuzz进阶教学——人工智能在模糊测试中的应用

【参考文献】白海波.人工智能技术在模糊测试中的应用[J].数字技术与应用,2023,41(08):16-18.DOI:10.19695/j.cnki.cn12-1369.2023.08.05. 目录 摘要 一、模糊测试简介 1、原理 2、工作流程 3、分类 4、应用领域 二、人工智能在模糊测试中的应用 1、人工智能技术 2、人…

AIGC系列之:GroundingDNIO原理解读及在Stable Diffusion中使用

目录 1.前言 2.方法概括 3.算法介绍 3.1图像-文本特征提取与增强 3.2基于文本引导的目标检测 3.3跨模态解码器 3.4文本prompt特征提取 4.应用场景 4.1结合生成模型完成目标区域生成 4.2结合stable diffusion完成图像编辑 4.3结合分割模型完成任意图像分割 1.前言 …

前馈式神经网络与反馈式神经网络的区别,联系,各自的应用范围和场景!!!

文章目录 前言一、前馈式神经网络是什么&#xff1f;二、前馈式神经网络包括&#xff1a;三、反馈式神经网络是什么&#xff1f;四、反馈式神经网络包括&#xff1a;总结 前言 前馈式神经网络和反馈式神经网络是两种主要的神经网络架构&#xff0c;它们在网络结构和应用场景上…

Python接口自动化测试 ---Allure报告使用详解

这一节主要是记录allure的内容以及用法&#xff0c;怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下&#xff0c;它的可读性是最好、最直观的。这不仅仅是我想要的效果&#xff0c;也是很多小伙伴想要的结果&#xff0c;毕竟这是给领导看…