双向链表

一、概述

  • 单链表虽然从头结点向尾结点遍历很简单,但反过来,从后往前遍历就麻烦了
  • 因此我们考虑通过给node结点增加一个属性,指向前驱,则从后往前遍历变得简单
  • 在删除节点时,无需查找前驱元素,效率会有所提高

这里写图片描述

二、对象的封装

  • 单链表中写的较详细,这儿直接贴代码,有疑问可以看看单链表那篇
  • 插入和删除建议自己动手一边画图一遍写代码

这里写图片描述

这里写图片描述

function Node(ele){
    this.element = ele;
    this.next = null;
    this.pre = null;
}
function LinkedList(){
    this.head = new Node("head");
    this.find = find;               //遍历链表,查找给定的元素
    this.insert = insert;           //插入节点
    this.remove = remove;           //删除节点
    this.display = display;         //遍历展示
}
function find(item){
    var obj = this.head;
    while(obj.element != item && obj != null){
        obj = obj.next;
    }
    return obj;
}
function insert(cur,item){
    var item = new Node(item);
    var cur = this.find(cur);
    if(cur){
        item.next = cur.next;
        cur.next = item;
        item.pre = cur;
        cur.next.pre = item;
    }
}
function remove(item){
    var item = this.find(item);
    if(item.next != null){
        item.pre.next = item.next;
        item.next.pre = item.pre;
        item.pre = null;
        item.next = null
    }
}
function display(){
    var obj = this.head.next;
    while(obj != null ){
        console.log(obj.element);
        obj=obj.next;
    }
}
var list = new LinkedList();
list.insert("head","monkey");
list.insert("monkey","cat");
list.insert("cat","mall");
list.display();  //monkey cat mall
list.remove("cat");
list.display()  //monkey mall
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值