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

力扣面试150(51/100)

8.9 19. 删除链表的倒数第 N 个结点

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

我的思路:三个指针:pre , cur , next

进行遍历吧,在n - 1的时候要保存pre指针,cur = pre.next next = cur.next

然后pre.next = next cur.next = null

!!!!

是倒数第几个->整数len - n 个,那就先得到总的长度len ,然后遍历找到对应的删除位置,最后进行删除

注意啦!虚拟头节点的使用:代码简洁,不需要考虑删除的什么类型的节点

情况不使用虚拟头节点使用虚拟头节点
删除头节点需要单独判断 if (n === count)直接 pre.next = pre.next.next
删除中间节点正常遍历到前一个节点正常遍历到前一个节点
删除尾节点正常遍历到前一个节点正常遍历到前一个节点
代码复杂度需要额外条件判断逻辑统一,更简洁

我的代码:

var removeNthFromEnd = function(head, n) {const dummy = new ListNode();//使用虚拟头节点,让删除头节点也变得普通dummy.next = head;let cur = head;let count  = 0 ;while(cur){count++;cur = cur.next;}cur = dummy;for(let i = 0 ; i < count - n ; i++){cur = cur.next;}cur.next = cur.next.next;return dummy.next;};

总结:

这段代码通过引入虚拟头节点来统一处理链表删除操作,避免了单独判断删除头节点的特殊情况。首先遍历链表计算总长度,然后根据长度和目标位置找到要删除节点的前驱节点,最后通过修改指针完成删除。虚拟头节点的使用让代码逻辑更简洁,无论删除的是头节点、中间节点还是尾节点,都能用同一种方式处理,增强了代码的健壮性和可读性。

http://www.dtcms.com/a/323421.html

相关文章:

  • 【Python 工具人快餐 · 第 2 份】
  • 使用SPM进行核磁数据预处理
  • 【无标题】六边形结构在二维拓扑量子色动力学模型中确实具有独特优势,并构建完整的二维拓扑量子色动力学模型。
  • Redis三种特殊数据类型
  • 【深度学习2】logistic回归以及梯度下降
  • synchronized和RentrantLock用哪个?
  • Datawhale AI夏令营第三期,多模态RAG方向 Task2
  • 小白成长之路-Docker部署
  • 第二十八天(cookiesessiontokeny验证)
  • JVM性能调优的原则有哪些?
  • 深入理解C++构造函数与初始化列表
  • P1025 [NOIP 2001 提高组] 数的划分 题解
  • 【嵌入式DIY实例-Arduino篇】-水质检测系统
  • SQL面试题及详细答案150道(01-20) --- 基础概念与语法篇
  • python踩坑之识别错误...
  • 如何分析需求的可行性
  • Spring——Spring懒加载设计使用场景
  • 深入解析进程创建与终止机制
  • Linux 信号处理标志sa_flags详解
  • MPU-6050 超实用入门
  • 一文详解 C++ 继承体系
  • [C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
  • EP06:【DL 第二弹】动态计算图与梯度下降入门
  • 【C/C++】具有C风格的强制类型转换:显式类型转换、隐式类型转换,C语言强制类型转换
  • 第六章:【springboot】框架springboot原理、springboot父子工程与Swagger
  • 算法题(183):质量检测
  • 《答客难》东方朔
  • 网络原理-初识
  • FreeRTOS入门知识(初识RTOS任务调度)(三)
  • AVL树的四种旋转