本人习惯用JavaScript语言写算法 所以接下来的每一道题 我大多都会用JavaScript来写出来,当然 语言无所谓 能学会算法才是最重要的,好那么接下来就开始
题目描述
//这里我给出JavaScript的链表结点定义,用class实现
class LinkNode={
val;
next=null;
constructor(val,next){
this.val=val;
this.next=null;
}
}
//链表结点的基本要素:结点值 next域
实现思路:
题目给出的是链表的序列,参数接收的是头结点。val为要删除的值
然后在代码随想录中有一个虚拟结点删除方法,十分简便
就是创建一个虚拟结点替换头结点
//删除算法实现
var removeElements = function(head, val) {
const dummyNode=new linkNode(-1)
//创建虚拟结点
dummyNode.next=head
//虚拟结点变成头结点
var prev=dummyNode
//定义一个指向当前结点的上一个结点的指针
while(prev.next){
if(prev.next.val===val){
prev.next=prev.next.next
//如果相等 就跳过结点
//prev一开始指向虚结点,prev.next就是当前结点,如果当前结点等于值,那么就把prev的next域换成next.next,那么就相当于跳过了当前结点
}else{
prev=prev.next
//反之 指针后移,指向下一个结点
}
}
return dummyNode.next
//返回新的头结点,也就是虚拟结点的下一个
};