题目链接

LeetCode 203. 移除链表元素

解题思路

这道题最大的困难在于如何处理表头。在掌握了 JS 的传递引用之后,处理链表就慢慢走上正轨。

但是在遍历之后会发现表头无法处理,所以就想出了虚拟一个表头来解决这个问题。在官方题解中,这个做法被认为是”哨兵节点”。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 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 nextNode = null;
let preNode = new ListNode(); // 创建哨兵节点
preNode.next = head;
let current = preNode;

while(current.next) {
nextNode = current.next;
if(nextNode && nextNode.val === val) {
current.next = nextNode.next;
} else {
current = current.next;
}
}

return preNode.next;
};