用js实现简单链表
今天偶然想起一直以来使用传统面向对象的编程语言比如C++、java等实现的---链表----数据结构是不是也可以用js实现?至少之前看到过用js实现二叉树的代码,但是js实现的二叉树简直丑陋。。。。(用数组实现的)。
直接上代码
(function(window){
//Node结点类
var Node=function(data){
this.data=data;
this.next=null;
this.getNext=function(){
return this.next;
}
}
Node.prototype.nextNode = function(){
if(this.next===null) return;
if(this.next instanceof Node){
return this.next;
}
};
Node.prototype.addNode=function(node){
this.next=node;
};
//链表类
function LinkList(){
this.head=new Node(0);
this.currentNode=this.head;
};
LinkList.prototype.add=function(node){
this.currentNode.addNode(node);
this.currentNode=this.currentNode.nextNode();
};
LinkList.prototype.deleteNode=function(data){
var pre=this.head;
var _node=this.head.nextNode();
// console.log("prev \n");
// console.log(pre);
// console.log("_node \n");
// console.log(_node);
while(_node!=null){
if(_node.data===data) break;
pre=pre.nextNode();
_node=_node.nextNode();
}
pre.addNode(_node.getNext());
this.currentNode=_node.getNext();
};
LinkList.prototype.show=function(){
let item=this.head.nextNode();
console.log(item);
while(item!=null){
console.log('data= '+item.data+';');
item=item.nextNode();
}
};
//主函数
(function(){
var linklist=new LinkList();
var arr=[1,2,3,4,5];
for(var i=0,length=arr.length;i<length;i++){
linklist.add(new Node(arr[i]));
}
linklist.show();
linklist.deleteNode(3);
linklist.show();
}())
})(window)
结果如下:(chrome控制台)
上面的代码中只实现了简单的链表功能,比如增加Node、删除Node(根据指定的数据找到对应数据的结点,并删除)。