【刷题记录】19. 删除链表的倒数第 N 个结点
一、题目描述
来源:力扣(LeetCode)
给你一个链表,删除链表的倒数第 n
**个结点,并且返回链表的头结点。
复制代码
示例 2:
复制代码
示例 3:
复制代码
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz 进阶: 你能尝试使用一趟扫描实现吗?
二丶思路分析
在删除节点的时候,我们需要知道节点的长度才能确定倒数第 n 个节点的位置。
如果遍历一次,在查找一次,也能做到。题目进阶的要求是尝试一次扫描来实现。
那么如果一次扫描来实现我们可以借助于类似窗口的概念来实现
这个窗口我们让它是定长
n
的一个窗口,窗口左边为链表的起点。
然后移动这个窗口,当窗口右边移动到链表的末端节点时候为空时候,窗口的左边指向的即是要被删除的 倒数第
n
个节点
如示例 1
三、代码实现
复制代码
复杂度分析
时间复杂度:,其中
n
是链表的长度空间复杂度:
运行结果
总结
这个题目也是利用双指针 + 窗口都类似概念(定长的)
,利用这个窗口的长度和移动,来确定倒数第n
个节点所在的位置。来达到一次的遍历实现。
版权声明: 本文为 InfoQ 作者【WangNing】的原创文章。
原文链接:【http://xie.infoq.cn/article/26e4213f6b96dcfc736ead5b8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论