「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
题目描述
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
力扣(LeetCode)leetcode-cn.com/problems/re…
解题思路
- 通过双指针找到倒数第 n 个节点 back,back 的前一个节点 prev
- 将 prev 的下个节点指向 back 的下个节点
- 如果 prev 为空则代表删除头节点,返回 head.next 即可
- 如果 prev 不为空时返回head 示例 1:
输入: head = [1,2,3,4,5], n = 2
输出: [1,2,3,5]
代码实现
var removeNthFromEnd = function(head, n) {
let front = back = head
let prev = null
//指针从头走 n-1 步找到第 n 个节点
while (--n) {
front = front.next
}
//双指针同时走,前面指针到达链表位节点时,后指针为倒数第 n 个节点
//记录第 n 个节点的前一个节点 prev
while (front.next) {
front = front.next
prev = back
back = back.next
}
//如果 prev 为空则表示删除头节点
if (!prev) return head.next
//删除 back 节点,即将 back 的前节点指向 back 的后一个节点
prev.next = back.next
return head
}
如有错误欢迎指出,欢迎一起讨论!