题目描述
解题思路
我们知道,删除节点的一般做法是:让该节点的前一个节点指向该节点的后一个节点即可
所以,我们可以指定前一个节点和当前节点分别为pre
和cur
, 因此,引入虚拟节点(head之前,即pre=head.next
)
代码实现
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var deleteNode = function(head, val) {
let pre =new ListNode(-1); // 创建虚拟节点
pre.next=head; // 虚拟节点指向head
let cur = pre;
while (cur.next) {
if (cur.next.val===val) {
cur.next = cur.next.next; // 若相等,则指向下下个节点,即跳过cur.next这个节点
break;
}
cur=cur.next; // 若不相等,让cur指向下一个节点继续循环
}
return pre.next;
};