一、题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
二、思路分析
做过几道数组题目后,让我们来尝试一下链表的题目吧~
这道题其实有一个比较简单版本的,只需要删除一个结点就可以,那样的话我们只要明白怎么删除结点就可以,但这道题有一些不同。我们不能直接的去那么做,因为不知道开头的结点状况,这样的话我们需要会一个重要的方法,虚拟结点法
AC代码
var removeElements = function(head, val) {
let newHead = new ListNode( null ),
prev = newHead,
curr = head;
prev.next = curr;
while (curr) {
if (curr.val === val) {
prev.next = curr.next;
curr = prev.next;
}
else {
prev = curr;
curr = curr.next;
}
}
return newHead.next;
};
四、总结
这种创建虚拟结点的做法,大家一定要好好体会。在做链表的题的时候,很多时候我们有这样一个结点辅助,就会简单很多