力扣19.删除链表的倒数第N个节点
19.删除链表的倒数第N个节点
力扣题目链接
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
1 | 输入:head = [1,2,3,4,5], n = 2 |
示例 2:
1 | 输入:head = [1], n = 1 |
示例 3:
1 | 输入:head = [1,2], n = 1 |
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list
思路
可以通过遍历计算链表长度得到然后第二次找到进行删除,也可以通过双指针的方法使快指针领先慢指针,当快指针位于链表尾部时慢指针即处于要删除的节点,还可以通过栈(先进后出)来取得倒数个节点。这里提供一种递归的方法,类似于栈进行处理。
当处于尾节点时,返回1,判断当处于时返回节点(需要删除的节点的上一个),其余进行++操作。由于对于头节点需要分开处理,这里采用虚头节点(节点)进行统一处理。
实现代码
1 | /** |
- 时间复杂度:,其中 是链表的长度。
- 空间复杂度:,其中 是链表的长度。
本文封面图片由Stefan-1983在Pixabay上发布
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 James的成长之路!
评论