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

Leetcode19(亚马逊真题):删除链表的倒是第N个节点

题目分析

  • 删除节点关键:找到被删节点的前一个节点,指针指向

  • 虚拟头节点,方便删除头结点,形成统一操作

  1. 为啥要让快指针先行?

我认为更好懂的一种解释:快指针先行n步,这样快慢指针之间形成了一段长度为n的窗口,之后快慢指针同步向前相当于保持窗口长度不变。这样当快指针到达了末尾指向NULL,另一端的慢指针距离末尾的长度是n,自然就是指向倒数第n个位置了。

  1. 为啥快指针先行了n+1步?

由于单链表中的next指针指向的是下一个节点,想要删除倒数第n个节点,自然要将操作指针慢指针指向倒数第n+1个节点,这样才能进行删除操作。

  1. 虚拟头节点dummyHead的作用是?

如果单链表中要删除的节点是头节点,这个头节点正好是dummyHead的下一个节点,如此即可统一起来删除操作而不必单独考虑。

  1. 额外注意?

如果使用C++,最后记得释放删除的节点以及dummyHead

代码实现

易错点我也卸载注解里面了,记得应该 new  创建节点对象

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {// ListNode* dummyHead;   这只是定义内存,并么有初始化,ListNode* dummyHead = new ListNode(0);  //应该通过new 创建节点对象//虚拟头结点指向头结点的pre,为了删除头结点dummyHead->next = head;ListNode* fast = dummyHead;ListNode* slow = dummyHead;//快指针先走n+1步,形成n+1窗口大小for(int i=1; i<=n+1; i++){fast = fast->next;}//慢指针开始走,和fast同步走,永远必fast小n+1窗口大小,//那么当fast走到null末尾时,slow指针就是倒数第n+1个节点了while(fast != nullptr){fast = fast->next;slow = slow->next;}//此时slow指向倒数n节点的前一个节点,//即倒数N+1节点。然后通过slow删除slow->next = slow->next->next;return dummyHead->next;}
};

相关文章:

  • 特征存储的好处:特征存储在机器学习开发中的优势
  • dumpsys activity activities中的Task和ActivityRecord信息解读
  • 【Linux网络】应用层自定义协议与序列化及Socket模拟封装
  • 2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888
  • Trae 编程工具 Cline 插件安装与 Claude 3.7 API Key 自定义配置详解
  • 济南国网数字化培训班学习笔记-第二组-6-输电线路现场教学
  • 热度大幅度下降,25西电经济与管理学院(考研录取情况)
  • html单页业务介绍源码
  • RuntimeError: “unfolded2d_copy“ not implemented for ‘Half‘
  • 从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践
  • 跑MPS产生委外采购申请(成品)
  • 线程同步与互斥(互斥)
  • Vue.js 的组件化开发指南
  • 【k8s】KubeProxy 的三种工作模式——Userspace、iptables 、 IPVS
  • 如何应对客户提出的不合理需求
  • 第四章: 服务集成抽象
  • 3.ArkUI Image的介绍和使用
  • JSX介绍
  • django admin 添加自定义页面
  • C++学习:六个月从基础到就业——STL算法(三)—— 数值算法(上)
  • 马上评丨一些影视剧的片名,越来越让人看不懂
  • 韩冬任国家广播电视总局副局长,齐竹泉任中央广播电视总台副台长
  • 低轨卫星“千帆星座”已完成五批次组网卫星发射,未来还有这些计划
  • 吃菜和吃肉,哪个更“增肌”?
  • “下一个高增长市场,还是中国”,龚正市长会见参加上海车展的国际企业高管
  • 人民日报首推“大地书单”,10本好书上榜!