# 删除链表的倒数第N个节点(19)
# 题目
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
# 示例
给定一个链表: 1->2->3->4->5
, 和 n = 2
.
当删除了倒数第二个节点后,链表变为 1->2->3->5
说明:给定的 n 保证是有效的。
# 算法
要删除链表的某个节点,需要找到被删除节点的前一个节点prev
,然后prev.next = prev.next.next
即删除prev的后面一个节点
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
export const removeNthFromEnd = (head, n) => {
let fast = head,
slow = head;
while (--n) {
fast = fast.next;
}
if (!fast.next) {
return head.next;
}
fast = fast.next;
while (fast.next) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24