移除链表元素

移除链表元素

https://leetcode.cn/problems/remove-linked-list-elements/description/

逻辑:分情况讨论
  • 情况1:链表头部元素和val相同
  • 情况2:链表非头部元素和val相同
两种情况统一的方法:在链表头部加一个虚拟节点,从虚拟节点开始,每次对当前节点的 next 元素进行判断。即可统一两种情况

如果cur.next.val == val 让cur的next指向cur.next.next 否则cur = cur.next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var removeElements = function(head, val) {
//虚拟节点,虚拟节点的next指向传入链表的头
const dummy = new ListNode(0);
dummy.next = head;
// dummy用于返回最终结果的头部,因此不能改动。只需将其赋值给另一个变量
let cur = dummy;
while(cur.next){
if(cur.next.val == val){
cur.next =cur.next.next;
}
else{
cur = cur.next;
}
}
return dummy.next;
};

我抽象的将这个过程想象为一个继承的过程,如果cur.next.val == val,那么它没有继承cur的资格,直接找cur.next.next过来进行资格审查。如果通过继承cur。每一代cur都要找继承人,直到最后没人可选。