题目:请编写一个函数,用于 删除单链表中某个特定节点 。
在设计函数时需要注意,你无法访问链表的头节点 head
,只能直接访问 要被删除的节点 。(题目数据保证需要删除的节点 不是末尾节点 。)
回顾
在做这道题之前,先来回顾一下链表的一些基本操作。
const a = { val: 'a'};
const b = { val: 'b'};
const c = { val: 'c'};
const d = { val: 'd'};
// 1. 遍历链表
let p = a; //先声明指针 p,指向链表的头部
while (p) {
console.log(p.val);
p = p.next;
}
// 2. 链表中插入e
const e = { val: 'e'};
c.next = e;
e.next = d;
// 3. 删除e
c.next = d;
思路
一开始我想获得被删除节点的前一个节点,然后将前一个节点指向下下一个节点,但很显然,链表中是无法获取被删除节点的上一个节点,指向是单向的。
那么正确解法: (示例: 删除5)
获取要被删除的节点的下一个节点
并将他赋值
给要被删除的节点,此时将要被删除的节点指向下下一个节点
即可。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} node
* @return {void} Do not return anything, modify node in-place instead.
*/
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next
};