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

【LeetCode热题100道笔记】删除链表的倒数第 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]

思考

通过快慢指针+前驱指针实现高效定位:先让快指针超前慢指针n步,再让两者同步遍历,当快指针抵达链表尾部(null)时,慢指针恰好指向要删除的“倒数第n个节点”,而前驱指针始终跟随慢指针,记录其前一个节点,最终通过前驱指针跳过目标节点完成删除;若快指针走n步后直接到尾,则说明要删除的是头节点,直接返回头节点的后继即可。

算法过程

  1. 初始化指针:定义slow(慢指针)、fast(快指针),初始均指向链表头节点head;定义pre(前驱指针),初始也指向head(用于记录slow的前一个节点)。
  2. 快指针超前n步:循环n次,每次将fast向后移动1步(拉开与slow的n步距离)。
  3. 处理“删除头节点”场景:若fast移动n步后变为null(说明倒数第n个节点就是头节点),直接返回slow.next(跳过原头节点)。
  4. 同步遍历找目标节点:循环移动fastslowpre,直到fast变为null
    • 先将pre更新为当前slow(记录slow的前驱);
    • 再将slowfast分别向后移动1步;
    • 最终slow会指向要删除的“倒数第n个节点”,pre指向其前一个节点。
  5. 删除目标节点:通过pre.next = pre.next.next,让前驱节点跳过slow(目标节点),完成删除。
  6. 返回结果:返回原链表头节点head(此时已移除目标节点)。

该算法仅遍历链表1次,时间复杂度O(L)(L为链表长度),空间复杂度O(1)(仅用3个指针)。

代码

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @param {number} n* @return {ListNode}*/
var removeNthFromEnd = function(head, n) {let slow = head, fast = head;for(let i = 0; i < n; i++) {fast = fast.next;}if (!fast) {return slow.next;}let pre = slow;while (fast) {pre = slow;slow = slow.next;fast = fast.next;}if (!pre.next) {return null;}pre.next = pre.next.next;return head;
};
http://www.xdnf.cn/news/1464589.html

相关文章:

  • Kafka核心原理与常见面试问题解析
  • 《AI 问答系统:从开发到落地,关键技术与实践案例全解析》
  • 【技术教程】如何将文档编辑器集成至基于Java的Web应用程序
  • c++工程如何提供http服务接口
  • 基于 GEE 批量下载 Landsat8 地表温度(LST)数据
  • 【计算机科学与应用】砚文化虚拟博物馆的Unity3D设计
  • 理解损失函数:机器学习的指南针与裁判
  • 踩坑实录:Django继承AbstractUser时遇到的related_name冲突及解决方案
  • 【Flask】测试平台中,记一次在vue2中集成编辑器组件tinymce
  • XR数字融合工作站打造智能制造专业学习新范式
  • windows通过xrdp远程连接Ubuntu黑屏问题解决
  • FDTD_3 d mie_仿真
  • 计算机毕设选题:基于Python数据挖掘的高考志愿推荐系统
  • AI+消费,阿里的新故事很性感
  • 新后端漏洞(上)- Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)
  • sub3G、sub6G和LB、MB、HB、MHB、LMHB、UHB之间的区别和联系
  • STM32——WDG看门狗
  • Typer 命令行工具使用示例
  • SQL Server全链路安全防护
  • 【Python】QT(PySide2、PyQt5):点击不同按钮显示不同页面
  • 中天互联:AI 重塑制造,解锁智能生产新效能​
  • [网鼎杯 2020 青龙组]AreUSerialz
  • Excel数据导出小记二: [大数据示例]
  • JP4-7-MyLesson后台前端(一)
  • yolov8部署在一台无显卡的电脑上,实时性强方案
  • 【分享】基于百度脑图,并使用Vue二次开发的用例脑图编辑器组件
  • 探讨Xsens在人形机器人研发中的四个核心应用
  • 产线相机问题分析思路
  • 基于单片机的六足机器人控制系统设计
  • HTML文本格式化标签