js实现链表
class Node{
constructor(element){
this.value=element;
this.next=null;
}
}
class NodeList{
constructor(){
this.head=null;
this.size=0
}
getNode(index){
if(index<0||index>=this.size){
throw new Eror('out range')
}
let p=this.head;
for(let i=0;i<index;i++){
p=p.next
}
return p
}
append(element){
let node=new Node(element)
if(this.size==0){
this.head=node;
}else{
let current=this.getNode(this.size-1)
current.next=node
}
this.size++
}
appendAt(element,position){
if(position<0||position>this.size){
throw new Error('out range ')
}
let node =new Node(element)
if(position==0){
node.next=this.head
this.head=node
}else{
let current=this.getNode(position-1)
node.next=current.next
current.next=node
}
this.size++
}
removeAt(position){
if(position<0||position>this.size-1){
throw new Error('out range ')
}
let current=this.head
if(position==0){
this.head=current.next
}else{
let pre=this.getNode(position-1)
current=pre.next
pre.next=current.next
}
this.size--
}
indexOf(element){
let current=this.head
for(let i=0;i<this.size;i++){
if(current.value==element){
console.log(i);
return i
}
current=current.next
}
return -1
}
}
let h=new NodeList()
h.append(1)
h.append(2)
h.append(3)
h.appendAt(0,0)
h.appendAt(4,4)
h.indexOf(0)
h.removeAt(4)
console.dir(h)