算法面试题——删除链表后第N个节点

news/2024/10/21 3:43:44/

在这里插入图片描述

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

进阶:你能尝试使用一趟扫描实现吗?

快慢指针

为什么要用dummy哑结点?

一般来说,链表题中涉及到删除、交换顺序等,会使用到dummy节点

不使用dummy节点会怎样?

不使用的话,题目要求返回链表的头结点。因此我们可以选择返回head。但是,我们需要考虑一个边界问题,如果要求删除链表的头结点呢?对于这种特殊情况,如果不使用dummy节点的话就比较复杂了。由于我们在删除操作的时候,是希望找到【想删除节点】的前一个节点。如果想删除的节点正好是第一个,那怎么办?要么特殊处理,要么设置一个新节点——dummy节点,把新节点指向头结点,这样头结点就也有前一个节点了——即dummy节点,这样删除操作就不需要对头结点进行特殊判断了。

def test(head,n):"""双指针,让一个指针(fast)先跑n步,后面每次两个指针都往后走一步,直到(循环)快指针走到末尾。此时慢指针(slow)就停在倒数第N个节点的前一个节点。:param head::param n::return:"""left=ListNode()right=ListNode()dummy=ListNode()# step1: 快指针先走n步for i in range(n):right=right.next# step2: 快慢指针同时走,直到fast指针到达尾部节点,此时slow到达倒数第N个节点的前一个节点while right.next:left=left.nextright=right.next# step3: 删除节点,并重新连接left.next=left.next.nextreturn dummy.next

http://www.ppmy.cn/news/2696.html

相关文章

蜂鸟E203学习笔记(六)——交付

1.1 处理器中指令的交付、取消、冲刷 1.1.1 指令交付、取消和冲刷 影响指令交付的因素: 中断、异常以及分支预测指令造成流水线冲刷ARM中存在条件码,只会取消自己不会造成流水线冲刷 交付的位置 执行阶段()完成分支预测之后写…

【实操篇】Linux组管理

目录 ●组管理 ●linux组的基本介绍 ●组的创建以及对用户的操作(复习) ●查看文件的所有者 ●改变文件所有者 ●修改文件所在的组 ●改变用户所在组 ●linux组的基本介绍 在Linux中的每个用户必须属于一个组,不能独立于组外。并且在Li…

springboot+easyexcel:导入excel表格

目录 前言 1.常规导入 2.读取到指定的列 3.读取全部的sheet页 4.日期、数字及其他自定义格式的转换 5.表头有多行的读取 前言 excel表格的导入与导出,可以说是业务系统里比较常见的功能了,早些时候相信很多人都是使用POI实现excel的导入与导出功能…

mac OS 环境下安装 Redis(使用Homebrew终端安装)

使用Homebrew终端安装Redis(好处后面会介绍) 获取安装Homebrew(复制如下代码到终端运行): /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"选择好克隆原后按提示…

为所有弹窗增加全屏切换功能

1、现状 在开发两个管理系统,现在的页面20,其中包含不少的弹窗。在项目开发过程中没人提过弹窗要全屏的事情,且在数据量较大的位置已经增加了可全屏的入口。但老板两次说为什么不给所有的弹窗增加全屏的功能,从中感觉到了侮辱&am…

aws cdk 创建eks集群和ecs集群并部署服务

cdk 和 eks 使用cdk版本2.45通过cdk创建eks集群 const cdk require("aws-cdk-lib"); const eks require("aws-cdk-lib/aws-eks"); const ec2 require("aws-cdk-lib/aws-ec2"); const iam require("aws-cdk-lib/aws-iam");class …

编译原理 2 - 词法分析

第3章 词法分析3.1 词法分析器的功能和结构3.2 状态转换图3.3 正则文法 和 正则表达式3.4 有限自动机 DFA与NFA测试第3章 词法分析 重点:① 词法分析器的输入、输出;② 用于识别符号的状态转移图的构造;③ 根据状态转移图实现词法分析器 难点…

Google Earth Engine(GEE)——将每小时降水量转化为逐日的降水量

很多时候我们获取影像的时间分辨率为逐小时,但是如何获取影像的累积降水量?这里的整体思路就是获取不同时间影像的时间序列,然后分别获取每天的降水量,最后同一秋累计值,如果要进行时序图片展示的情况,我们就可以再秋累计值的时候就可以建立一个时间属性,这样可以建立时…