19. 删除链表的倒数第 N 个结点
「题目:」
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
「示例:」
输入:head = [1,2,3,4,5], n = 2, 输出:[1,2,3,5].
「解题思路:」
删除链表元素的核心操作是:preNode.next = preNode.next.next。
由于链表中的首元素也是可以被删除的,所以需要在首元素之前创建一个元素来处理这种场景。
由于链表只能从前往后遍历,所以要想删除倒数第 n 个结点,需要先遍历一次链表获取总长度,再求出该元素处于链表中的第几位。
时间复杂度:O(n),空间复杂度:O(1)。
const removeNthFromEnd = (head, n) => {
const dummyHead = new ListNode(-1);
dummyHead.next = head;
let currentHead = dummyHead.next;
let len = 0;
while (currentHead) {
len++;
currentHead = currentHead.next;
}
currentHead = dummyHead;
let index = len - n;
while (inde