JavaScript单向链表的创建遍历插入删除操作
Posted 别Null.了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript单向链表的创建遍历插入删除操作相关的知识,希望对你有一定的参考价值。
目录
链表
什么是链表
链表:数据的一种存储结构,一个链表包含若干个节点,每个节点至少包含一个数据域和一个指针域,指针域指向下一个节点。
强调:链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身和指向下一个元素的指针组成。
链表的分类
(1)单向链表:每个节点都只有一个指向其下一个节点的指针域(next)。
(2)双向链表:每个节点都有一个指向其前一个节点的指针域(prev)和指向其下一个节点的指针域(next) 。
链表与数组的区别
- 相对于传统的数组,链表的一个好处在于,添加或移除元素的时候不需要移动其他元素。然而,链表需要使用指针。
- 数组是可以直接访问任何位置的任何元素,而要想访问链表中间的一个元素,需要从起点(表头)开始迭代到列表直到找到所需元素。
单向链表的创建、遍历、插入、删除代码
js代码:
//定义单向链表的节点类
class Node{
constructor(data){
this.data = data //节点的数据域(数据成员)
this.next = null //节点的指针域(指针成员)
}
}
//定义单向链表类
class SingleLinked{
constructor(){
this.size = 0 //单链表的长度,用来记录链表中的节点个数,为一个空链表
this.head = new Node('head') //是链表的头指针:记录链表的起始地址
this.currentNode = '' //用来记录当前节点
}
//获取链表的长度
getLength(){
return this.size
}
//判断链表是否为空
isEmpty(){
return this.size === 0 //如果this.size为0则说明链表为空,即返回true
}
//遍历链表:不重复的访问链表中的每一个节点
displayList(){
var list = ''
var currentNode = this.head //指向链表的头指针
while(currentNode){ //若当前节点不为空,则执行循环
list+=currentNode.data //连接节点的数据域
currentNode = currentNode.next //让当前指针指向当前节点的下一个节点
if(currentNode){ //如果currentNode不为空则加上连接符
list += '->' //链表节点的连接符
}
}
console.log(list)
}
//获取链表的最后一个节点
findLast(){
var currNode = this.head
while(currNode.next){ //若当前节点的next域为空,则他是链表的最后一个节点,跳出循环
currNode = currNode.next //若当前节点的next域不为空则让指针指向当前节点的下一个节点
}
return currNode
}
//采用尾插法给链表插入元素
appendNode(element){
var currNode = this.findLast() //找到链表的最后一个节点
var newNode = new Node(element) //创建一个新的节点
currNode.next = newNode
newNode.next = null
this.size++ //链表的长度加1
}
//删除链表中的一个节点
delete(element){
//this.displayList()
var currentNode = this.head
try{
while((currentNode.next!=null)&&(currentNode.next.element!=element)){ //判断,如果节点靠后则节点的next的next为空,不为空时进行删除
if(currentNode.next.data === element){
currentNode.next = currentNode.next.next
this.size--
}else{
currentNode = currentNode.next
}
}
}
catch(e){ //测试函数,判断函数的运行错误
console.log(e)
}
}
}
测试代码:
<script src="../js/单向链表.js"></script>
<script> //不能写在有js代码的javascript中
var slist = new SingleLinked()
console.log(slist.isEmpty()) //打印链表是否为空,若为空则输出true
slist.appendNode(1001)
//创建链表
var arr = [1001,1234,1006,7788,5512,6129]
for(var i=0;i<arr.length;i++){
slist.appendNode(arr[i])
}
//遍历输出链表
slist.displayList()
//删除链表中的1006元素
slist.delete(1006)
slist.displayList()
</script>
实现结果:
总结
单向链表是js中一个较为重要的知识点,需要熟练掌握其思想与各种有关操作,同时应该了解链表与数组的区别和联系。
以上是关于JavaScript单向链表的创建遍历插入删除操作的主要内容,如果未能解决你的问题,请参考以下文章