题目:
删除链表中等于给定值 val 的所有节点。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
这道题要删除全部符合val的节点,所以要在循环查找目标节点的同时移除节点
// 定义子节点类
function ListNode(val, next) {
this.val = val === undefined ? 0 : val
this.next = next === undefined ? null : next
}
// 虚拟头节点做法 优势:只需要处理listnode的next即可 head就是头结点 是一个ListNode
function removeElements(head, val) {
// 将虚拟头结点指向头结点再进行循环查找
const dummyHead = new ListNode(0, head)
let currNode = dummyHead
while (currNode.next !== null) {
if (currNode.next.val === val) {
currNode.next = currNode.next.next // 如果是val 则断开元素的引用 指向目标元素的下一个元素的引用
continue // 继续查找
}
// 如果不是val 则继续迭代
currNode = currNode.next
}
return dummyHead.next // 返回真正的头结点
}