[algoritmo js] Realização da lista vinculada (1)

Realização de lista unida individualmente

  1. Mas não está organizado em uma determinada ordem
  2. Uma estrutura de dados básica inclui, 增删改查

Perguntas comuns da entrevista:
Insira a descrição da imagem aqui


//nodelist类
class NodeList{
    
    
    constructor(rank,name,desc){
    
    
        this.rank=rank
        this.name=name
        this.desc=desc
        this.next
    }
    showNode(){
    
    
        console.log(`rank:${
      
      this.rank},name:${
      
      this.name},desc:${
      
      this.desc},`);   
    }
}


//没有实现按英雄排名进行插入
class singleNode{
    
    
    constructor(){
    
    
        this.head=new NodeList(0,'','')
    }
    //找到最后的节点
    // 将最后节点的next指向新的节点
    isEmpty(){
    
    
        return this.head.next==null;
    }


    addNode(rank,name,desc){
    
     //这个Node需要吧实现Nodelist实例当做参数{rank,name,desc}
       let temp=this.head
       //遍历链表找到最后
       //非连续结构的遍历, temp相当于index 指针
       while(true){
    
    
            if(temp.next==null){
    
    
                break;
            }
            //没有找到指向下一个
            temp=temp.next 
       }
       //循环结束添加的新节点指向最后
       temp.next=new NodeList(rank,name,desc)
       
    }

    showNode(){
    
    
        let temp=this.head
        if(this.isEmpty())return;
        while(true){
    
    
            if(temp.next==null)break;
            //显示节点信息
           
            //同时将temp指针进行后移,完成循环
            temp=temp.next
            temp.showNode()
        }
        

    }

}
let a=new singleNode()
a.addNode(1,'孙悟空','跑得快')
a.addNode(2,'猪八戒','吃的多')
a.addNode(3,'沙和尚','做的多')

a.showNode()
console.log(a);


resultado:

Insira a descrição da imagem aqui
A estrutura de dados real da lista vinculada é o objeto:

rank: 0,
     name: '',
     desc: '',
     next://指向下一个节点

O próximo é como um ponteiro aninhado camada por camada,

Pensamento:

Se a estrutura de dados da imagem aparecer, como restaurar e atravessar, ( 进行扁平化处理)
engenharia reversa


//nodelist类
class NodeList{
    
    
    constructor(rank,name,desc){
    
    
        this.rank=rank
        this.name=name
        this.desc=desc
        this.next
    }
    showNode(){
    
    
        console.log(`rank:${
      
      this.rank},name:${
      
      this.name},desc:${
      
      this.desc},`);   
    }
}


//没有实现按英雄排名进行插入
class singleNode{
    
    
    constructor(){
    
    
        this.head=new NodeList(0,'','')
    }
    //找到最后的节点
    // 将最后节点的next指向新的节点
    isEmpty(){
    
    
        return this.head.next==null;
    }


    addNode(rank,name,desc){
    
     //这个Node需要吧实现Nodelist实例当做参数{rank,name,desc}
       let temp=this.head
       //遍历链表找到最后
       //非连续结构的遍历, temp相当于index 指针
       let rankNo;
       while(true){
    
    
            if(temp.next==null){
    
    
                break;
            }
            //没有找到指向下一个
            temp=temp.next 
       }
       //循环结束添加的新节点指向最后  添加
       temp.next=new NodeList(rank,name,desc)   
    }
           //若要实现按照编号顺序添加,
    /**
     * 1.首先需要一个辅助指正, temp
     * 2. 将新节点rank前一个位置next新节点
     * 3.后一个位置: 由新节点的next指向后一个节点
     * 
     */  
    insertNode(rank,name,desc){
    
    
        let temp=this.head

        // let rankNo;
        while(true){
    
    
            if(temp.next==null)break;
            // if(temp.rank<rank<temp.next.rank) {
    
    
            //     let temp2=temp.next
            //     let newTemp=new NodeList(rank,name,desc)
            //     temp.next=newTemp
            //     newTemp.next=temp2
            // }
            // temp=temp.next 
            if(rank<temp.next.rank){
    
    
               break;
            }
            temp=temp.next
           
        }
        let temp2=temp.next
        let newTemp=new NodeList(rank,name,desc)
        temp.next=newTemp
        newTemp.next=temp2
        
    }  

    //按照rank就行删除就可,与插入相反
    delNode(rank){
    
    
        let temp=this.head

        // let rankNo;
        while(true){
    
    
            if(temp.next==null)break;
         
            if(rank==temp.next.rank)break;
            
            temp=temp.next
           
        }
        let temp2=temp.next
        temp.next=temp2.next
        // newTemp.next=temp2
    }
    



    showNode(){
    
    
        let temp=this.head
        if(this.isEmpty())return;
        while(true){
    
    
            if(temp.next==null)break;
            //显示节点信息
           
            //同时将temp指针进行后移,完成循环
            temp=temp.next
            temp.showNode()
        }
        

    }

}
let a=new singleNode()
a.addNode(1,'孙悟空','跑得快')
a.addNode(3,'沙和尚','做的多')
a.insertNode(2,'猪八戒','吃的多')
a.delNode(3)

a.showNode()
console.log(a);

Acho que você gosta

Origin blog.csdn.net/ZHXT__/article/details/106981260
Recomendado
Clasificación