js 删除链表倒数第k个节点
要删除链表倒数第k个节点,可以使用双指针法。以下是使用JavaScript实现的示例代码:
class ListNode {
constructor(val, next = null) {
this.val = val;
this.next = next;
}
}
function removeNthFromEnd(head, k) {
let dummy = new ListNode(0);
dummy.next = head;
let first = dummy;
let second = dummy;
// 先让第一个指针移动k+1个节点
for (let i = 0; i <= k; i++) {
first = first.next;
}
// 同时移动两个指针,直到第一个指针到达链表末尾
while (first !== null) {
first = first.next;
second = second.next;
}
// 删除第二个指针后面的节点
second.next = second.next.next;
return dummy.next;
}
// 示例用法
const head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))));
const k = 2;
const newHead = removeNthFromEnd(head, k);
console.log(newHead); // 输出: ListNode { val: 1, next: ListNode { val: 2, next: ListNode { val: 3, next: ListNode { val: 5, next: null } } } }
在这个示例中,我们首先创建了一个哑节点(dummy node),它的next
指针指向链表的头节点。然后,我们使用两个指针first
和second
,让first
指针先移动k+1个节点。接下来,我们同时移动两个指针,直到first
指针到达链表末尾。此时,second
指针指向的节点就是要删除的节点的前一个节点。最后,我们修改second
指针的next
指针,使其指向要删除节点的下一个节点,从而实现删除操作。