# 移除链表元素(203)
# 题目
删除链表中等于给定值 val 的所有节点。
# 示例
输入: 1->2->6->3->4->5->6
, val = 6
输出: 1->2->3->4->5
# 算法
# 递归
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
export const removeElements = (head, val) => {
if (!head) return null;
head.next = removeElements(head.next, val);
return head.val === val ? head.next : head;
};
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 哨兵节点
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
export const removeElements = (head, val) => {
let sentinel = new ListNode();
sentinel.next = head;
let prev = sentinel,
cur = head;
while (cur) {
// 如果cur.val===val,那么prev.next指向cur的下一个,prev的指针不变
// 否则让prev的指针向前移动一步
// 无论是否相等,cur都向后移动一步
if (cur.val === val) {
prev.next = cur.next;
} else {
prev.next = cur;
}
cur = cur.next;
}
return sentinel.next;
};
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25