码迷,mamicode.com
首页 > Web开发 > 详细

js 实现单向链表

时间:2018-04-22 12:52:38      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:不可   div   单向链表   result   cti   for   UNC   length   log   

单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 通过指针连接起来,但是只能单向遍历的内存块。由于它是单向的,或者说不可逆的,所以我们可以把它比作我们的人生:小学->中学->大学->工作->养老。

实现过程

var Node = function (data) {
  this.data = data;
  this.next = null;
};

var LList = function () {
  this.firstNode = null;
  this.lastNode = null;
  this.length = 0;
};

LList.prototype = {
  clear: function () {
    this.firstNode = null;
    this.lastNode = null;
    this.length = 0;
  },

  get: function (position) {
    var currentNode = this.firstNode;
    for (var i = 1; i < position + 1; i++) {
      currentNode = currentNode.next;
    }
    return currentNode;
  },
  isEmpty: function () {
    var result = false;
    if (this.length == 0 && this.firstNode == null) {
      result = true;
    }
    return result;
  },
  add: function () {
    if (arguments.length == 1) {
      data = arguments[0];
      var newNode = new Node(data);
      if (this.isEmpty()) {
        this.firstNode = newNode;
      } else {
        this.lastNode.next = newNode;
      }
      this.lastNode = newNode;
      this.length++;
      return true;
    } else if (arguments.length == 2) {
      var isSuccessful = true;
      var position = arguments[0];
      var data = arguments[1];
      if (position < this.length + 1) {
        var newNode = new Node(data);
        if (this.isEmpty()) {
          this.firstNode = newNode;
          this.lastNode = newNode;
        } else if (position == this.length) {
          this.lastNode.next = newNode;
          this.lastNode = newNode;
        } else if (position == 0) {
          newNode.next = this.firstNode;
          this.firstNode = newNode;
        } else {
          var nodeBefore = this.get(position - 1);
          var nodeAfter = nodeBefore.next;
          newNode.next = nodeAfter;
          nodeBefore.next = newNode;
        }
        this.length++;
      } else {
        isSuccessful = false;
      }
      return isSuccessful;
    }
  },
  display: function () {
    var str = ‘‘;
    var currentNode = this.firstNode;
    while (currentNode != null) {
      str += currentNode.data + ‘, ‘
      currentNode = currentNode.next;
    }
    str = str.substr(0, str.length - 2);
    console.log(str);
  },
  remove: function (position) {
    var result = null;
    if (!this.isEmpty() && (position < this.length)) {
      if (position == 0) {
        result = this.firstNode.data;
        this.firstNode = this.firstNode.next;
        this.lastNode = null;
      } else {
        var nodeBefore = this.get(position - 1);
        var nodeToRemove = nodeBefore.next;
        var nodeAfter = nodeToRemove.next;
        nodeBefore.next = nodeAfter;
        result = nodeToRemove.data;
        if (position == this.length - 1) {
          this.lastNode = nodeBefore;
        }
      }
      this.length--;
    }
    return result;
  },
  set: function (position, data) {
    var isSuccessfule = true;
    if (!this.isEmpty() && (position < this.length)) {
      var desireNode = this.get(position);
      desireNode.data = data;
    } else {
      isSuccessfule = false;
    }
    return isSuccessfule;
  },
  contains: function (data) {
    var found = false;
    var currentNode = this.firstNode;

    while (!found && (currentNode != null)) {
      if (data === currentNode.data) {
        found = true;
      } else {
        currentNode = currentNode.next;
      }
    }
    return found;
  },
  size: function() {
    return this.length;
  },
  reverse: function() {
    var newList = new LList();
    for(var i=this.length-1; i>=0; i--) {
      newList.add(this.get(i).data);
    }
    return newList;
  }
};

  

js 实现单向链表

标签:不可   div   单向链表   result   cti   for   UNC   length   log   

原文地址:https://www.cnblogs.com/hua-shao/p/8906080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!