# 移除链表元素(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

# 哨兵节点

/**
 * 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