LeetCode练习-删除链表的第n个结节

大家好,依旧是你们的萧萧啊。

今天我们来练习一个经典的链表问题:删除链表的第n个节点。在这篇文章中,我们将深入分析这个问题,并给出一个有效的解决方案。

问题描述

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

解决方案

在解决这个问题时,我们可以使用双指针的方法,这是一种高效且简单的思路。以下是解决该问题的步骤:

  1. 创建一个虚拟头节点:这个节点指向链表的头部,方便处理边界情况(如删除头节点)。

  2. 移动指针:使用两个指针(firstsecond)。首先,移动 first 指针到链表的第n+1个节点。

  3. 同时移动两个指针:然后,同时移动 firstsecond,直到 first 到达链表的末尾。此时,second 指向要删除节点的前一个节点。

  4. 删除节点:修改指针,跳过要删除的节点。

  5. 返回新头节点:最后,返回虚拟头节点的下一个节点,即新的头节点。

代码实现

下面是上述思路的代码实现:

# Definition for singly-linked list.
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution:def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:dummy = ListNode(0)  # 创建一个虚拟头节点dummy.next = headfirst = dummysecond = dummy# 移动 first 指针 n + 1 步for _ in range(n + 1):first = first.next# 同时移动 first 和 second 指针,直到 first 到达链表的末尾while first:first = first.nextsecond = second.next# 删除倒数第 n 个节点second.next = second.next.nextreturn dummy.next  # 返回新的头节点

 

复杂度分析

  • 时间复杂度:O(L),其中 L 是链表的长度。我们只需遍历一次链表。
  • 空间复杂度:O(1),我们只使用了常数级别的额外空间。

总结

通过使用双指针方法,我们可以有效地解决删除链表倒数第n个节点的问题。这种方法不仅简洁明了,而且高效,非常适合在实际编码中使用。如果你在做 LeetCode 练习时遇到类似问题,不妨尝试这种思路。

我们下次再见,拜拜啦。 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)

WRB Hidden Gap MetaTrader 指标用于检测和标记宽范围的柱体(非常长的柱体)或宽范围的烛身(具有非常长实体的阴阳烛)。此指标可以识别WRB中的隐藏跳空,并区分显示已填补和未填补的隐藏跳空,方便用户一眼识别…

GEE数据集:1984-2022 年间加拿大 6.5 亿公顷森林生态系统的年度优势树种(也称主要树种)地图

目录 简介 数据集说明 空间信息 变量 代码 代码链接 下载链接 引用 许可 网址推荐 0代码在线构建地图应用 机器学习 简介 加拿大长期树种(1984-2022 年)∥在该数据集中,我们利用空间分辨率为 30 米的 Landsat 时间序列图像&…

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间(切换到dba用户…

家庭宽带的ip地址是固定的吗?宽带ip地址怎么修改‌

在家庭网络环境中,IP地址的分配和管理是用户常关注的问题。本文将探讨家庭宽带IP地址的固定性,并介绍如何修改宽带IP地址,以满足用户的不同需求。 一、家庭宽带的IP地址是否固定? 关于家庭宽带的IP地址是否固定,答案并非一概而论…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式:RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上,后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用,但是通常会将两者结合使用。 一、持久化 1.1、什么…

【Android】使用 Compose 自定义 View 实现从 0 ~ 1 仿 EChat 柱状图

目录 前言DrawScopeDrawScope Api 绘制柱状图绘制 X 轴绘制 Y 轴绘制柱状背景绘制柱状前景完整代码最终效果 存在的问题 前言 本文讲的是使用 compose 去自定义 View ,如果您未曾通过继承 View 的方式去实现自定义 View,那么,我建议在观看本…

监控-08-skywalking监控告警

文章目录 前言一、准备二、配置skywalking2.1 修改alarm-settings.yml2.2 重启skywalking 三、收到告警邮件总结 前言 skywalking根据监控规则,通过webhook调后端微服务接口,从而发送告警邮件。 一、准备 根据上几章内容,保证skywalking能监…

离散数学实验二c语言(输出关系矩阵,输出矩阵性质,输出自反闭包,对称闭包,传递闭包,判断矩阵是否为等价关系,相容关系,偏序关系)

离散数学实验二 一、算法描述,算法思想 (一)相关数据结构 typedef struct Set *S; //存放集合 struct Set {int size; //集合的元素个数char *A; //存放该集合的元素 }; Set存放有限集合A,该集合的元素个数为size&#xff0…

Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)

目录 一. Kafka安装包获取 1. 官网地址 2. 百度网盘链接 二. 环境要求 1. Java 运行环境 (1) 对 java 环境变量进行配置 (2) 下载完毕之后进行解压 三. 启动Zookeeper 四. 启动Kafka (1) 修改Conf下的server.properties文件,修改kafka的日志文件路径 (2)…

海外云手机实现高效的海外社交媒体营销

随着全球化的深入发展,越来越多的中国企业走向国际市场,尤其是B2B外贸企业,海外社交媒体营销已成为其扩大市场的重要手段。在复杂多变的海外市场环境中,如何有效提高营销效率并降低运营风险,成为了众多企业的首要任务。…

无人机悬停精度算法!

一、主要算法类型 PID控制算法: PID控制算法是一种常用的闭环控制算法,通过计算目标值与当前值的误差,并根据比例(P)、积分(I)、微分(D)三个参数来调整控制输出&#x…

SQL高级查询03

SQL查询语句的下载脚本链接!!! 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库​编辑https://download.csdn.net/download/Z0412_J0103/89908378https://download.csdn.net/download/Z0412_J0103/89908378 1 查询employ…

聚链成网,趣链科技参与 “跨链创新联合体”建设

近日,2024全球数商大会在上海举办。大会由上海数据集团和上海市数商协会联合主办,上海市数据局和浦东新区人民政府支持,以“数联全球,商通未来——‘链’接数字经济新未来”为主题,聚焦区块链技术和应用场景展开。 会上…

PostGis空间(下):空间连接与空间索引

目录 1、简介2、空间连接3、空间索引3.1 索引操作3.2 空间索引的工作原理3.2.1 R-Tree 3.3 空间索引函数3.4 仅索引查询3.5 ANALYZE3.6 VACUUMing3.7 函数列表 PS 1024到啦!!! 先祝各位程序员或者想成为程序员正在奋斗中的伙伴1024程序员节快…

JavaScript进阶:手写代码挑战(二)

​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript手写代码篇 在现代Web开发中,JavaScript 是不可或缺的编程语言…

Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨…

Mac 使用 zsh 终端提示 zsh: killed 的问题

我的脚本的内容为: #!/bin/bashset -epids$(ps -ef | grep consul | grep -v grep | awk {print $2})for pid in $pids; doecho "kill process: $pid"kill -9 $pid donecd $(dirname $0)nohup ./consul agent -dev > nohup.log &可以看到这是一个…

阿里云项目启动OOM问题解决

问题描述 随着项目业务的增长,系统启动时内存紧张,每次第一次启动的时候就会出现oom第二次或者第n的时候,就启动成功了。 带着这个疑问,我就在阿里云上提交了工单,咨询为什么第一次提交失败但是后面却能提交成功尼&a…

Matlab学习01-矩阵

目录 一,矩阵的创建 1,直接输入法创建矩阵 2,利用M文件创建矩阵 3,利用其它文本编辑器创建矩阵 二,矩阵的拼接 1,基本拼接 1) 水平方向的拼接 2)垂直方向的拼接 3&#xf…

shell脚本-函数

文章目录 一、函数介绍什么是函数、为什么使用函数、如何使用函数 二、shell脚本中如何定义函数Way1Way2Way3 三、shell脚本中如何调用函数四、shell脚本中使用内置变量(1、#、?、2等等)五、函数的返回值、shell脚本中函数的返回值函数的返回值概念shell脚本中函数的返回值ret…