203移除链表元素

203. 移除链表元素

题目

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

示例 1:

1
2
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

1
2
输入:head = [], val = 1
输出:[]

示例 3:

1
2
输入:head = [7,7,7,7], val = 7
输出:[]

题解

方法一(删除头结点时另做考虑)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
//删除值相同的头结点后,可能新的头结点值也相等,循环解决
while(head && head.val === val){
head = head.next;
}
if(head === null) return null;
let cur = head;
//确保当前节点后还有节点
while(cur.next){
if(cur.next.val === val){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return head;
};

方法二(添加一个虚拟头结点)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
let node = new ListNode(-1);
node.next = head;
let cur = head;
let pre = node;
while(cur){
if(cur.val === val){
pre.next = cur.next;
cur = cur.next;
}else{
pre = cur;
cur = cur.next;
}
}
return node.next;
};

参考链接

203.移除链表元素(三种方法