双指针(快慢指针)

双指针(或称为快慢指针)方法是一种在链表、数组等数据结构中经常使用的技术。它的核心思想是利用两个指针以不同的速度遍历数据结构,从而快速定位到需要操作的位置。在删除链表的倒数第n个节点这个问题中,双指针方法特别有效。

双指针方法详解

1. 引入哑节点(Dummy Node)

为了处理头节点被删除的情况,我们通常在链表头部添加一个哑节点(Dummy Node)。哑节点不存储任何数据,只是它的next指针指向链表的头节点。这样,无论我们要删除的是头节点还是其他节点,我们都可以统一处理。

2. 初始化快慢指针

我们定义两个指针,一个快指针(fast)和一个慢指针(slow),都初始化为哑节点。

3. 快指针先走n步

我们让快指针先向前走n步,这样快指针和慢指针之间就拉开了n个节点的距离。此时,快指针和慢指针之间的距离(包括快指针指向的节点和慢指针指向的节点)就是n+1。

4. 快慢指针同时移动

接着,我们让快慢指针同时向前移动。由于快指针比慢指针先走了n步,所以当快指针到达链表末尾(即fast.nextNone)时,慢指针slow就指向了倒数第n+1个节点。此时,慢指针的next指针指向的就是要删除的倒数第n个节点。

5. 删除倒数第n个节点

由于我们已经找到了要删除的节点的前一个节点(即慢指针指向的节点),所以我们只需要将慢指针的next指针指向下下个节点(即slow.next.next),就可以删除倒数第n个节点了。

6. 返回结果

因为我们使用了哑节点,所以最终返回的是哑节点的next指针,也就是修改后的链表的头节点。

示例

以输入head = [1,2,3,4,5], n = 2为例:

  • 初始状态(引入哑节点):0 -> 1 -> 2 -> 3 -> 4 -> 5
  • 快指针先走2步:fast指向2slow指向0
  • 快慢指针同时移动:当fast到达末尾5时,slow指向3
  • 删除倒数第2个节点(即4):将slow.next指向5
  • 返回结果:返回哑节点的next,即1 -> 2 -> 3 -> 5

总结

双指针方法通过控制两个指针的移动速度,可以方便地定位到链表中的特定位置,从而实现对链表的快速操作。在删除链表的倒数第n个节点这个问题中,双指针方法提供了一种简洁、高效的解决方案。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千小凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值