javascript单链表

javascript中单向链表实现

    1.表头head,链表最后一个next指针为null;

    2.链表不存在数组的下表,关系只能通过上一个节点来找;

    3.链表优势,插入方便。

/**节点类*/
function Node(data){
    this.data=data;
    this.next=null;
}

/**链表类*/
function NodeList(){
    this.head=new Node('head');
    this.find=find,
    this.insert=insert,
    this.remove=remove,
    this.print=print
}

/**链表查找,根据data数据查找*/
function find(data){
    var cNode=this.head;
    while(cNode&&cNode.data!=data){
        cNode=cNode.next;
    }
    return cNode;
}

/**链表插入,在ddata处插入value*/
function insert(data,value){
    var preNode=this.find(data);
    var cNode=new Node(value);
    cNode.next=preNode.next;
    preNode.next=cNode;
}

/**获取当前节点的上一个节点*/
function _findPreNode(data){
    var preNode=this.head;
    while(preNode.next&&preNode.next.data!==data){
        preNode=preNode.next;
    }
    if(!preNode.next){//没有找到,返回null
        return null;
    }else{
        return preNode;//找到,返回上一个节点
    }
}

/**链表删除*/
function remove(data){
    var preNode=_findPreNode.call(this,data);//这个函数不是NodeList的属性,函数内的this不是NodeList对象实例,要用call改变上下文
    var cNode=preNode.next;
    preNode.next=cNode.next;
    cNode.next=null;
    return cNode;
}

/**打印单向链表*/
function print(){
    var cNode=this.head.next;
    while(cNode){
        console.log(cNode.data);
        cNode=cNode.next;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值