Leetcode刷题日常第一题-链表的删除

Leetcode刷题日常第一题-链表的删除

本人习惯用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
//返回新的头结点,也就是虚拟结点的下一个
};

LICENSED UNDER CC BY-NC-SA 4.0