给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
var removeElements = function (head, val) {
let dummy = new ListNode()
dummy.next = head
let curr = dummy
while (head) {
if (head.val === val) {
head = head.next
} else {
curr.next = head
curr = head
head = head.next
}
}
curr.next = head
return dummy.next
};
用一张图片来表示head,cur,dummy的关系
dummy用来返回整个链表
cur用来“穿针引线”,生成新的删除指定节点之后的链表
cur总是跟在head屁股后头,当head友好时候(不用删除当前节点),cur就与head在一个房间玩耍,当head不开心时(需要删除当前节点),cur就乖乖不敢乱动等待head脾气变好(到达下一个不需要删除的节点),然后再屁调屁调儿跟过去