手机版

如何用Java脚本语言实现功能齐全的单链表详解

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

前言

前端也要搞好数据结构哦!

用Java脚本语言实现了个单链表,通过合框架构造函数可实例化一个单链表数据结构的对象,所有的方法放到合框架构造函数的原型对象上,写了暂时能想到的所有方法

开源代码库源码地址,下载可运行

实现

通过合框架的类创建链表实例,链表下有添加,查找,删除,显示节点等方法链表初始默认有一个_head '头部节点,使用时隐藏按元素/索引添加、删除,未找到时返回错误,查找未找到时返回空或-1 let obj=new LinkedList()方法介绍

查找

查找(项目)通过项目元素内容查找到该元素obj.findIndex(索引)通过指数索引查找到该元素obj.findIndexOf(项)通过项目元素内容查找到该元素索引obj.findPrev(项目)通过项目元素查找上一个节点元素添加

obj.insert(item,newElement)在项目元素后插入新元素推送(项目)在链表末尾插入项目元素obj.insertIndex(索引,新元素)在指数索引处插入新元素删除

移除(项目)删除项目元素obj.removeIndex(索引)删除指数索引处节点其他

obj.size()返回该链表的长度obj.display()数组形式返回该链表,便于观察,测试反转()链表顺序反转(递归)方法代码

链表类合框架

函数链接列表(.休息){这个_head=新节点(' _head') //链表头节点//如果新的时有传进值,则添加到实例中如果(休息。长度){这个。插入(rest[0],' _head ')为(让I=1;我休息i ) { this.insert(rest[i],rest[I-1])} }链表。原型。find=查找链接列表。原型。查找上一个=查找上一个链表。原型。查找索引=查找链表的索引。原型。push=推送链表。原型。insert=插入索引链表。原型。移除=移除索引链表。原型。size=大小链表。原型创建新节点类结节

函数节点(元素){这个。元素=元素this。next=null } obj。查找(项)

//查找函数,在链表中查找项目的位置,并把它返回,未找到返回-1函数查找(项目){让currNode=this ._head while (currNode!==null currNode.element!==item){ curr node=curr node。下一个} if(当前节点!==null){ return CurrNode } else { return null } } obj。查找索引

//通过元素的索引返回该元素函数findIndex(索引){ 0让currNode=这个._head让tmpIndex=0 while (currNode!==null) { //找到该指数位置,返回当前节点,出去头结点if (tmpIndex===索引1){ return curr node } tmpIndex=1 curr node=curr node。下一个}返回null }obj.findIndexOf(项)

函数查找(项)的索引{让currennode=this ._head让tmpIndex=0 while (currNode.next!==null currNode.next.element!==item){ tmpIndex=1 curr node=curr node。下一个} if(当前节点!==null){ return tmpIndex } else { return-1 } } obj。查找上一个(项)

//寻找目标节点项目的上一个节点,未找到返回-1函数查找上一个(项目){让Currnode=this ._head while (currNode.next!==null currNode.next.element!==item){ curr node=curr node。next } if(curr)节点。下一个!==item){ return CurrNode } else { return null } } obj。插入(项目,新元素)

//插入节点,找到要插入到的项目的节点位置,把新节点插到项目后面函数insert (newElement,item){让new Node=new Node(新元素)让currNode=this。查找(项目)if(currNode){ new Node。next=currNode。下一个currNode。next=new Node } else { console。错误(`插入错误:链表中不存在$ {项目}节点`)} }obj.insertIndex(index,newElement)

//插入节点,新节点插到指数索引下函数insertIndex (newElement,index){ let new Node=new Node(新元素)let currNode=this。如果(currNode){ new Node,则查找索引(index)。next=currNode。下一个currNode。next=new Node } else { console。错误(`插入索引错误:链表中不存在$指数}索引节点`) } }obj.push(项目)

//在链表最后一位添加元素函数推(元素){让新节点=新节点(元素)让当前节点=这个._head while (currNode.next!==null){ curr node=curr node。下一个} curr节点。next=新节点} obj。移除(项)

//删除节点,找到删除的位置,删除,未找到提示错误函数移除(项目){ //找到当前和上一个节点,让上一个节点的然后指向项目下一个节点让tmpPrev=this.findPrev(项)让tmpNext=this.find(项)if(tmpPrev tmpNext){ tmpPrev。next=tmpNext。next } else { console。错误(`删除错误:链表中不存在$ {项目}节点`) } }obj.removeIndex(index)

//删除某个索引下的节点函数移除索引(index){让tmpPrev=this。find index(index-1)让currNode=this。查找索引(index)if(tmpPrev currNode){ tmpPrev。next=currNode。next } else { console。错误(`删除索引错误:链表中不存在$指数}索引节点`()} }obj.size()

函数大小(){ 0让currNode=这个._head让tmpSize=0 while (currNode.next!==null){ TMPsize=1 curr node=curr node。下一个}返回tmpSize //不计算头部节点} obj.reversal()

//链表反转=递归函数reverse(){函数reverse allist(item){ if(item)。下一步){让tmpItem=reverse allist(item。下一个)项目。next=null tmpItem。next=item return item } else { obj ._ head。next=item return item } } reversalList(obj ._head.next) }obj.display()

功能显示(){ //链表展示和使用,默认头部不存在让currNode=这个_head.next让tmpArr=[] while (currNode!==null){ tmpArr。推式(当前节点)当前节点=当前节点。下一步}返回tmpArr }实例测试

//运行测试let obj=new LinkedList('节点0', '节点1', '节点2', '节点3', '节点4', '节点5 ')控制台。日志('-实例对象)console.log(obj) console.log(' -末尾插入元素推插入)控制台。日志。display())控制台。日志('-元素后插入元素)obj.insert('元素插入', '节点2’)控制台。日志。display())控制台。日志('-索引处插入元素)obj.insertIndex('索引插入,5)控制台。日志。display())控制台。日志('-查找元素位置)console.log(obj.find('节点4 '))控制台。日志('-移除元素)obj.remove('节点5’)控制台。日志。display())控制台。日志('-移除索引元素)obj。移除索引(5)控制台。日志。display())控制台。日志('-元素长度)控制台。日志。size())控制台。日志('-索引查找)控制台。日志。查找索引(2))控制台。日志('-元素查找索引)console.log(obj.findIndexOf('节点3 '))控制台。日志('-反转链表)obj。倒车()控制台。日志。显示())测试结果

结尾

最近遇到单链表反转的问题,所有加了一个单链表反转的方法,用递归实现

相关链接

实现单链表反转的几种方法

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

版权声明:如何用Java脚本语言实现功能齐全的单链表详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。