JavaScript数据结构链表知识详解
最近在看《javascript数据结构和算法》这本书,补一下数据结构和算法部分的知识,觉得自己这块是短板。
链表:存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。
好处:可以添加或移除任意项,它会按需扩容,且不需要移动其他元素。
与数组的区别:
数组:可以直接访问任何位置的任何元素;
链表:想要访问链表中的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。
做点小笔记。
functionLinkedList(){
varNode=function(element){
this.element=element
this.next=null
}
varlength=0
varhead=null
this.append=function(element){
varnode=newNode(element)
varcurrent
if(head==null){//链表为空
head=node
}else{//链表不为空
current=head
//循环链表,直到最后一项
while(current.next){
current=current.next
}
current.next=node
}
length++//更新链表长度
}
this.insert=function(position,element){
varnode=newNode(element)
varcurrent=head
varprevious
varindex=0
if(position>=1&&position<=length){//判断是否越界
if(position===0){//插入首部
node.next=current
head=node
}else{
while(index++<position){
previous=current
current=current.next
}
node.next=current
previous.next=node
}
length++//更新链表长度
returntrue
}else{
returnfalse
}
}
this.indexOf=function(element){
varcurrent=head
varindex=-1
while(current){
if(element===current.element){
returnindex
}
index++
current=current.next
}
return-1
}
this.removeAt=function(position){
if(position>-1&&position<length){//判断是否越界
varcurrent=head
varprevious
varindex=0
if(position===0){//移除第一个元素
head=current.next
}else{
while(index++<position){
previous=current
current=current.next
}
previous.next=current.next//移除元素
}
length--//更新长度
returncurrent.element
}else{
returnnull
}
}
this.remove=function(element){
varindex=this.indexOf(element)
returnthis.removeAt(index)
}
this.isEmpty=function(){
returnlength==0
}
this.size=function(){
returnlength
}
this.toString=function(){
varcurrent=head
varstring=""
while(current){
string=","+current.element
current=current.next
}
returnstring.slice(1)
}
this.getHead=function(){
returnhead
}
}
以上所述是小编给大家介绍的JavaScript数据结构链表知识详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!