JavaScript实现leetcode203. 移除链表元素
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
删除的节点在中间

删除的节点在头部
此时可以通过哨兵节点去解决它,哨兵节点广泛应用于树和链表的中,如伪头,伪尾,标记等,他们是纯功能的,通常不保存任何数据,其目的就是使得链表标准化,如使链表永不为空,永不无头,简化插入和删除。

这里的哨兵节点用于伪头。
let linknode = new ListNode(0),且设置 linknode.next = head;prev.next = current.next;prev = current;current = current.next;/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
// 引入新的变量
let linknode = new ListNode(0);
linknode.next = head;
let prev = linknode;
let current = linknode;
while(current) {
// 将前一个元素的 next 指向 current.next 实现删除改节点
// 因为可能会有很多个值等于 val,所以即使找到一个值,也要接着遍历
if(current.val === val) {
prev.next = current.next;
} else {
prev = current;
}
current = current.next;
}
return linknode.next;
};