【链表】LeetCode #19 删除链表的倒数第N个节点(时间复杂度O(n),在所有Java提交中击败了100%的用户)

该博客介绍了如何在一次遍历中解决LeetCode第19题——删除链表的倒数第N个节点。使用双指针技巧,一个指针先走N步,然后两个指针同步移动,当先走的指针到达链表尾部时,另一个指针指向的就是倒数第N个节点的前一个节点,从而实现删除操作。代码示例和思路清晰,适用于Java开发者学习。
摘要由CSDN通过智能技术生成

题目链接:

LeetCode #19 删除链表的倒数第N个节点

题目描述:

#19. 删除链表的倒数第N个节点

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

示例:

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

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

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

通过次数205,209 提交次数524,857

分析:

这个题的难度在于如何在一趟扫描中实现,想要找到链表的倒数第 n 个节点,其实就是链表尾和被删节点之间的长度为 n。

可以用 双指针 实现,定义两个指针 i, j

  • i 指向头结点 headj 指向正数第 n 个节点;
  • i, j 同时向后走,当 j 走到链表尾时,i 也就走到了倒数第 n 个节点;
  • 由于我们的目的是删除节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值