当前位置: 首页 > news >正文

双向链表删除节点时间复杂度_leetcode 19 删除链表的倒数第N个节点(c++)

206df47a1cffadc8e7f64c44946b2a7f.png

第一种方法:两次遍历(12ms),超过10%。

第二种方法:一次遍历( 4ms),击败93%

leetcode的耗时好像个位数的毫秒之间并不准确,原题链接:

力扣​leetcode-cn.com
6da4f0c690e986e8e30225abc0f39a79.png

### 题目

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

### 思路

首先先将倒数的第N个节点找出正序时候的位置,很明显可以得出倒数的第N个节点在正序中的位置是l+1-N(其中l是链表的总长度),题目已经说过了N是有效数字,所以就不用判断N是否有效了。

下一步就开始删除了,因为是单向链表,所以为了方便,另外定义一个ahead来保存指针遍历到的节点的前向节点。当删除头节点的时候,直接返回头结点的next节点就可以了,当删除第N个节点的时候,将第N-1个节点的next指针指向N+1(当为第N个节点为最后一个节点时,N+1是null,也可以正确运行),然后删除第N个节点,所以也没有问题。
但是这是一个两次遍历了,而且还存在内存泄漏。

时间复杂度:O(L),算法对链表进行了两次遍历,首先计算了链表的长度l,其次找到第l-n+1个结点。

空间复杂度:O(1)。

### code

/**

### 思路

此方法为一次遍历,利用双指针,p1、p2最开始都是指向头结点的,但是因为要删除的是倒数第N个节点,所以第一个指针p1先向前走N-1步,第二个指针p2才开始向前遍历,这样当指针p1->next指向NULL的时候,p2指针就正好指向要删除的节点,然后删除掉p2所指的这个节点就可以了,。

删除方法有点low,因为没有存储下来p2的前面一个节点,所以就将p2->next->val赋给了p2->val,然后删除掉p2->next,所以严格来说是删除了p2->next,也就是说严格来说是删除了倒数第N+1个节点。

时间复杂度:O(L),该算法对链表进行了一次遍历。

空间复杂度:O(1)。

### code

/**

相关文章:

  • Struts、spring、hibernate、EJB、ant术语说明
  • nexus 安装_Nexus在windows和centos中安装教程
  • 傅里叶级数拟合实验
  • k8s 安装nfs_GCP学习笔记6-NFS\MySQL\GKE配置
  • 数据图表与分析图_单一数据图表动态展示,学会圆环图搭配饼图,效果就是与众不同...
  • 关于inline函数
  • python怎么重新运行_崩溃后如何重新运行Linux? - python
  • 蓝眼泪
  • python3元组_python3 列表、元组操作
  • AT91RM9200引导程序的建立(一)--------建立交叉编译工具链
  • python 平均值_Python随笔11:Python代码规范之注释和文档
  • 心中无敌,天下无敌——转“赢在中国”主持人王利芬的博客片断
  • qt qmidarea 关闭事件_Qt摄像头热插拔实现
  • ogm 转 avi
  • windows桌面待办事项_桌面图标快满屏?你居然不知道这4款神器能帮你整理!
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • JavaScript中的对象个人分享
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • orm2 中文文档 3.1 模型属性
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Swoft 源码剖析 - 代码自动更新机制
  • - 概述 - 《设计模式(极简c++版)》
  • 免费小说阅读小程序
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 山寨一个 Promise
  • 一、python与pycharm的安装
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (九)c52学习之旅-定时器
  • (十六)Flask之蓝图
  • (转)nsfocus-绿盟科技笔试题目
  • (转)socket Aio demo
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)我也是一只IT小小鸟
  • 、写入Shellcode到注册表上线
  • .chm格式文件如何阅读
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 中创建支持集合初始化器的类型
  • .Net8 Blazor 尝鲜
  • .NET导入Excel数据
  • @RequestMapping用法详解
  • @Transactional 详解
  • [20171106]配置客户端连接注意.txt
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [BZOJ3757] 苹果树