js算法之单链表

40 阅读2分钟

今日学习了js数据结构的单链表,并对js的单链表进行了封装,用的是es6的类来创建的, 首先我们先创建一个Node类,代码如下

kotlin
代码解读
复制代码
class Node {
constructor(element) {
this.element = element
this.next = null }
}  

这样就创建好了一个Node类,然后我们还需要创建一个LinkedList类用来存储链表,代码如下

kotlin
代码解读
复制代码
class LinkedList { 
constructor() { 
this.count = 0 
this.head = null } 
}

这样就创建好了一个链表,接下来就是初始化链表,这里我们用new关键字来实例化对象

arduino
代码解读
复制代码
const node = new Node()

接下来就是对链表的基本操作,包括增删改查。 首先我们对链表添加push方法,也就是在链表的尾部插入一个节点,代码如下

javascript
代码解读
复制代码
push(element) {
const node = new Node(element)
if (this.head === null) {
this.head = node } 
else { 
let current = this.head 
while (current.next !== null) {
current = current.next
}
current.next = node
} 
this.count++ }  

这样子就写好了一个push方法,我们对代码解读一下,首先push方法接受一个参数, 为我们需要添加链表节点的数据,用形参element接收,然后在进行判断,首先判断头节点是否为空,如果头节点为空,那么我们直接将实例化好的节点赋值给头节点,如果头节点不为空,那么走的是else路径,首先创建一个current变量用于保存头节点,然后进行一个while循环,循环条件是,当我们保存的当前节点的next不为空时,将当前节点的next赋值给当前节点,这样子做的话,当我们的循环结束之后,current的值就是我们链表的最后一个节点,此时我们将node赋值给current.next就好了,完成这一步之后,别忘了count的数量要自增,couhnt用于保存 链表节点的数量。

删除

然后就是对链表的删除操作代码如下

kotlin
代码解读
复制代码
removeAt(index) {
if (index >= 0 && index < this.count) {
let current = this.head 
if (index === 0) {
this.head = this.head.next } 
else {
let previous = this.getNodeAt(index - 1)
current = this.getNodeAt(index) 
previous.next = current.next }
this.count-- 
return current.element } 
return }  

上面代码的作用就是删除指定下标的节点首先if判断是否满足规则,如果index=0的话,我们把this.head = this.head.next,如果不是的话,首先用两个变量接受一下上一个节点和当前节点,然后通过previous.next = current.next,这样就完成了删除操作,删除完之后别忘了,让count-- 最后返回我们删除节点的数据就好了。