前端学算法(五):链表

链表是一种物理存储结构上非连续、非顺序的数据结构,元素的逻辑顺序是通过链表中的指针链接次序实现的。节点由数据域和指针域构成。

如何实现链表:

(1)确定如何实现节点

(2)确定操作方法:需要实现查找指定节点方法(find),查找指定节点前一个节点方法(findPrevious),在某个节点后面插入新节点(insertAfter),删除某个节点(remove),遍历输出所有节点(display),输出当前节点(show),将指针后移n(back),将指针前移n。

具体实现:

#!/usr/bin/node
function Node(element) {
  this.element = element;
  this.next = null;
};

function LinkedList() {
  this.head = new Node('head');
  this.currNode = this.head;
  // 本函数从头节点开始查找链表中任何一个节点
  this.find = function (item) {
    var targetNode = this.head;
    while (targetNode.element !== item) {
      targetNode = targetNode.next;
    };
    return targetNode;
  };
  // 本函数从头节点开始查找头节点以外的所有节点
  this.findPrevious = function (item) {
    var targetNode = this.head;
    while (targetNode.next.element !== item) {
      targetNode = targetNode.next;
    };
    return targetNode;
  };
  // 本函数在某个节点后面插入新节点
  this.insertAfter = function (newElement,oldElement) {
    var newNode = new Node(newElement);
    var oldNode = this.find(oldElement);
    newNode.next = oldNode.next;
    oldNode.next = newNode;
    this.currNode = newNode;
  };
  // 本函数删除头节点以外的所有的节点,头节点代表整个列表,删除头节点的方法就是删除整个链表
  this.remove = function (item) {
    var prevNode = this.findPrevious(item);
    prevNode.next = prevNode.next.next;
    this.currNode = prevNode;
  };
  // 本函数从头节点开始遍历输出头节点以外的所有节点内容
  this.display = function () {
    var outputPrevNode = this.head;
    while (outputPrevNode.next !== null) {
      console.log(outputPrevNode.next.element);    // 不显示头节点
      outputPrevNode = outputPrevNode.next;
    };
  };
  this.show = function () {
    console.log(this.currNode.element);
  };
  this.back = function (n) {
    for (var i = 0; i < n; i++) {
      this.currNode = this.currNode.next;
    };
  };
  this.advance = function (n) {
    for (var i = 0; i < n; i++) {
      this.currNode = this.findPrevious(this.currNode.element)
    };
  };
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值