JS数据结构与算法之链表
JS数据结构与算法之链表
这是算法系列文章第一篇,参考的是<<javascript数据结构与算法>>
-
1.链表的概念, 可以去百度查阅 2.链表的实现,简单的链表数据结构操作的
以下是基本的数据结构
function LinkList(){
var Node = function(element){
this.element = element
this.next = null
}
}
链表末尾添加数据
let length = 0;
let head = null
this.append = function(element){
let node = new Node(element),current
/* debugger */
if(head === null){
head = node
}else{
//存在head,链表的缺点是必须从头开始遍历
current = head
while(current.next){
current = current.next;
}
current.next = node
}
length++
}
链表中删除数据
this.removeAt = function(pos){
/* debugger */
if(pos>-1 && pos < length){
let current = head,
prev,index = 0
if(pos === 0){
head = current.next
}else{
while(index++ < pos){
prev = current
current = current.next
}
prev.next = current.next
}
length--
return current.element
}else{
return null
}
}
添加链表中的数据
this.insertAt = function(pos,element){
if(pos>-1 && pos < length){
let current = head,
prev,index = 0
let node = new Node(element)
if(pos === 0){
node.next = current
head = node
}else{
while(index++ < pos){
prev = current
current = current.next
}
node.next = current
prev.next = node
}
length++
return true
}else{
return null
}
}
打印链表中的数据
this.toString1 = function(){
let current = head,string=
while(current){
string += current.element + (current.next ? n : )
current = current.next
}
return string
}
this.size = function(){
return length
}
查询链表中的数据
this.indexOf = function(element){
let current = head,index = -1
while(current){
if(element === current.element){
return index
}
index++
current = current.next
}
return -1
}
测试数据
let list = new LinkList() list.append(15) list.append(14) list.append(16) list.append(19) list.insertAt(1,20) console.log(list.toString1()); console.log(list.size()); console.log(list.removeAt(2));
下一篇:
JS设计模式(迭代器模式)
