当前位置: 首页 > Web前端 > JavaScript

JS数据结构单向链表

时间:2023-03-26 23:16:27 JavaScript

Single-waylinkedlist链表存储的是有序的元素集合,但与数组不同的是,链表中的元素在内存中并不是连续放置的。每个元素都由一个存储元素本身的节点和一个指向下一个元素的引用(也称为指针或链接)组成。注意:与传统数组相比,链表的一个优点是在添加或删除元素时不需要移动其他元素。但是,链表需要使用指针,因此在实现链表时需要格外小心。在数组中,我们可以直接访问任意位置的任意元素,但是要访问链表中间的元素,我们需要从起点(表头)开始迭代链表,直到找到想要的元素。一个简单的例子:寻宝:你有一条线索,这条线索是指向下一条线索去哪里找的指针。按照此链接到下一个位置,并获得指向下一个位置的另一条线索。得到链表中间的线索的唯一方法是从起点(第一条线索)沿着链表找到火车:一列火车由一系列车厢组成,每节车厢都相互连接.您可以轻松地分离汽车、更改其位置、添加或删除它。每一个马车都是链表的一个元素,马车之间的连接是一个指针。链表方法push(element)/append(element):在链表的末尾添加一个新元素insert(position,element):将一个新元素插入到链表的特定位置get(position):获取对应位置的元素indexOf(element):返回元素在列表中的索引。如果列表中没有元素,则返回update(position,element):修改某个位置的元素removeAt(position):从列表中的特定位置移除一个项目remove(element):从列表中移除一个项目isEmpty():如果链表不包含任何元素,则为true,如果链表长度大于falsesize():返回链表包含的元素个数。实现一个类似于数组长度的链表:classNode{constructor(element){//保存元素this.element=element//指向下一个节点this.next=null}}classLinkedList{constructor(){this.head=nullthis.length=0}append(element):追加数据到链表的末尾append(element){constnewNode=newNode(element);//附加到末尾if(!this.head){this.head=newNode}else{letcurrent=this.head;while(current.next){current=current.next}current.next=newNode}this.length++}insert(position,element):插入一个新项到链表的特殊位置insert(position,element){//判断越界问题if(position<0||position>this.length)returnfalse//新建节点constnewNode=newNode(element)//插入元素if(position===0){newNode.next=this.headthis.head=newNode}else{letindex=0letcurrent=this.headletprevious=nullwhile(index++this.length-1)returnnull//找到该位置的元素letindex=0letcurrent=this.headwhile(index++this.length-1)returnnull//删除元素letcurrent=this.headletprevious=nullletindex=0//if(position===0){this.head=current.next}else{while(index++