19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
解:
- 快慢指针+慢指针的前指针。快慢指针初始都指向头结点,前指针初始指向空,快指针先走n-1步。
- 然后三个指针都一起往后走,前指针用于记录慢指针的上一个节点。当快指针走完的时候,慢指针指向倒数第n个节点
- 将前指针的next指向慢指针的next
- 如果前指针为null表示头结点就是要删除的节点,返回慢指针的下一个节点,否则返回头结点
const removeNthFromEnd = function(head, n) {
let preNode = null
let quickNode = head
let slowNode = head
while (--n) quickNode = quickNode.next
while (quickNode.next) {
quickNode = quickNode.next
preNode = slowNode
slowNode = slowNode.next
}
preNode && (preNode.next = slowNode.next)
const res = slowNode.next
slowNode.next = null
return preNode ? head : res
};