链表在JS中的实现

作者: 俗三疯 | 来源:发表于2017-10-10 15:34 被阅读67次

定义链表

链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继,指向另一个节点的引用叫做链

单向链表

Node类

  • element用来保存节点上的数据
  • next用来保存指向下一个节点的链接
function Node(element){
    this.element = element;
    this.next = null;
}

LinkedList类

function LList(){
    this.head = new Node("head");//该链表的头对象
    this.find = find;//查找节点
    this.insert = insert;//插入节点
    this.remove = remove;//删除节点
    this.display = display;//展示链表节点
}
  • find
    该方法遍历链表,查找给定数据,如果找到数据,返回保存该数据的节点
function find(item){
    var currNode = this.head;
    while(currNode.element != item){
        currNode = currNode.next;
    }
    return currNode;
}
  • insert
function insert(newElement,item){
    var newNode = new Node(newElement);
    var current = this.find(item);
    newNode.next = current.next;
    current.next = newNode;
}
  • display
function display(){
    var currNode = this. head;
    while(!(currNode.next)==null){
        print(currNode.next.element);
        currNode = currNode.next;
    }
}
  • findPrevious
function findPrevious(item){
    var currNode = this.head;
    while(!(currNode.next == null)&&(currNode.next.element != item)){
        currNode = currNode.next;
    }
    return curNode;
}
  • remove
function remove(item){
    var prevNode = this.findPrevious(item);
    if(!(prevNode.next == null)){
        prevNode.next = prevNode.next.next
    }
}

双向链表

为Node类新增previous属性
function Node(element){
    this.element = element;
    this.next = null;
    this.previous = null;
}
  • insert
    在原有基础上需要设置新节点的previous属性
function insert(newElement,item){
    var newNode = new Node(newElement);
    var current = this.find(item);
    newNode.next = current.next;
    newNode.previous = current;
    current.next = newNode;
}
  • remove
    不需要再查找上一节点了
function remove(item){
    var currNode = this.find(item);
    if(!(currNode.next == null)){
        currNode.previous.next = currNode.next;
        currNode.next.previous = currNode.previous;
        currNode.next = null;
        currNode.previous = null;
    }
}
  • 新增findLast方法
    该方法用来查找最后的节点,便于以反序显示链表中元素这类任务
function findLast(){
    var currNode = this.head;
    while(!(currNode.next == null)){
        currNode = currNode.next;
    }
    return currNode;
}
  • dispReverse
function dispReverse(){
    var currNode = this.head;
    currNode = this.findLast();
    while(!(currNode.previous == null)){
        print(currNode.element);
        currNode = currNode.previous;
    }
}

循环列表

循环列表和单向列表相似,节点类型都是一样的。唯一区别是在创建循环链表是,让其头节点的next属性指向它本身

  • 修改LList类的构造函数
function LList(){
    this.head = new Node("head");
    this.head.next = this.head;
    this.find = find;
    this.insert = insert;
    this.display = display;
    this.findPrevious = findPrevious;
    this.remove = remove;
}
  • 修改display
    需要检查头节点,当循环到头节点时退出循环
function display(){
    var currNode = this.head;
    while(!(currNode.next == null)&&(currNode.next.element == "head")){
        print(currNode.next.element);
        currNdoe = currNode.next;
    }
}

整理自《数据结构与算法Javascript》

相关文章

  • 链表在JS中的实现

    定义链表 链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继,指向另一个节点的引用叫做链 单向链...

  • JS简单实现一个链表

    JS简单实现一个链表

  • markdown js实现链表list

    先学会js语法,再用js写好链表的代码可以实现链表的插入删除等操作,然后将写好的代码改为js格式的文件放入node...

  • 链表 --js实现

    1.链表的概念 列表存储的是有序元素集合,不同于数组,链表的中的元素在内存中并不是连续放置的。每个元素是由一个存储...

  • js实现链表

    function LinkedList() { var Node = function (element)...

  • js 链表实现

    一、节点的实现 我都知道链表就是用有向线段把多个节点按顺序串起来,要实现链表首先要实现节点,而每一个节点,有一个自...

  • js实现链表

    设计一个基于对象的链表 我们需要设计两个类,Node类用来表示结点,LinkedList类提供插入结点、删除结点、...

  • JS 实现链表

    Node 为创建节点的构造函数;LinkedList 为链表操作函数的构造函数。对链表的操作包括:插入节点、移除节...

  • 链表的JS实现

    参考链接:栈的JS实现

  • 数据结构与算法之链表面试题(四)

    目录 删除链表中的节点反转一个链表递归实现迭代(非递归)实现 一 删除链表中的节点 237. 删除链表中的节点 说...

网友评论

    本文标题:链表在JS中的实现

    本文链接:https://www.haomeiwen.com/subject/ghovyxtx.html