js实现双向链表互联网机顶盒实战应用

上实战代码:

linkedlistnode.js 节点类

/*
* 链表节点
*/
Dare.LinkedListNode = function () {
  this.data = null;//数据域
  this.prev = null;//前驱
  this.next = null;//后驱
};
Dare.extend(Dare.LinkedListNode, Dare);
Dare.LinkedListNode.prototype.getValue = function () {
  return this.data;
};
Dare.LinkedListNode.prototype.setValue = function (obj) {
  this.data = obj;
};
Dare.LinkedListNode.prototype.getPrev = function () {
  return this.prev;
};
Dare.LinkedListNode.prototype.setPrev = function (node) {
  this.prev = node;
};
Dare.LinkedListNode.prototype.getNext = function () {
  return this.prev;
};
Dare.LinkedListNode.prototype.setNext = function (node) {
  this.prev = node;
};

linkedlist.js 链表类

/*
* 双向链表
*/
Dare.LinkedList = function () {
  this.head = null;
  this.current = null;
  this.tail = null;
  this.length = 0;
};
Dare.extend(Dare.LinkedList, Dare);
/*
* 尾插法添加节点
*/
Dare.LinkedList.prototype.appendNode = function (node) {
  if (this == null) return;
  if (node == null) return;
  var tail = this.tail;
  if (tail == null) {
    this.tail = this.head = node;
  }
  else {
    tail.next = node;
    node.prev = tail;
    this.tail = node;
  }
  this.length++;
};
/*
* 删除节点
*/
Dare.LinkedList.prototype.moveNode = function (node) {
  if (this == null) return;
  if (node == null) return;
  //中间节点
  var prev = node.prev;
  if (prev != null) {
    prev.next = node.next;
  }
  if (node.next != null) {
    node.next.prev = prev;
  }
  //头节点
  if (node == this.head) {
    this.head = node.next;
  }
  //尾节点
  if (node == this.tail) {
    if (prev != null) {
      this.tail = prev;
    }
    else {
      this.head = this.tail;
    }
  }
  node.prev = null;
  node.next = null;
  this.length--;
};
/*
* 构造节点
*/
Dare.LinkedList.prototype.constructNode = function (node, obj) {
  if (node == null || obj == null) return;
  node.data = obj;
  return node;
};
/*
* 获取节点数据
*/
Dare.LinkedList.prototype.getNodeData = function (node) {
  if (node == null) return;
  return node.data;
};
/*
* 从头开始
*/
Dare.LinkedList.prototype.start = function () {
  if (this == null) return;
  return this.current = this.head;
};
/*
* 从尾开始
*/
Dare.LinkedList.prototype.end = function () {
  if (this == null) return;
  return this.current = this.tail;
};
/*
* 下个节点
*/
Dare.LinkedList.prototype.nextNode = function () {
  if (this == null) return;
  if (this.current == null) return
  var node = this.current;
  this.current = this.current.next;
  return node;
};
/*
* 上个节点
*/
Dare.LinkedList.prototype.prevNode = function () {
  if (this == null) return;
  if (this.current == null) return
  var node = this.current;
  this.current = this.current.prev;
  return node;
};
/*
* 链表是否空
*/
Dare.LinkedList.prototype.isEmpty = function () {
  if (this == null) return true;
  if (this.head == null) {
    return true;
  }
  else {
    return false;
  }
};
/*
* 链表长度
*/
Dare.LinkedList.prototype.getLength = function () {
  if (this == null) return;
  return this.length;
};
/*
* 清空链表
*/
Dare.LinkedList.prototype.clearList = function () {
  this.head.next = null;
  this.head = null;
};
/*
* 是否存在节点
*/
Dare.LinkedList.prototype.containsNode = function (obj) {
  if (this == null) return false;
  var node = list.head;
  if (node == null) return false;
  while (node != null) {
    if (node.data == obj) {
      return true;
    }
    node = node.next;
  }
}; 

实战调用用例代码陆续更新:

<script type="text/javascript">
    var linkedList = new Dare.LinkedList();
    function createList() {
      for (var i = 0; i < 7; i++) {
        var movie = {};
        var linkedListNode = new Dare.LinkedListNode();

        movie.id = i;
        movie.name = 'movie_' + i;
        linkedListNode.data = movie;
        linkedList.appendNode(linkedListNode); //创建链表
      }
      //deleteNode(linkedList);//删除节点
      //printList(linkedList); //输出链表
      printNode(linkedList);
    }
    function printList(list) {
      var node = list.head;
      if (node == null) return;
      var html = '';
      while (node != null) {
        var movie = node.data;
        html += movie.id + "|" + movie.name + "<br>";
        node = node.next;
      }
      document.write(html);
    }
    function deleteNode(list) {
      var node = list.head;
      if (node == null) return;
      var i = 0;
      while (node != null) {
        if (i == 3) {
          linkedList.moveNode(node); //删除指定节点
          break;
        }
        i++;
        node = node.next;
      }
    }
    var printNode = function(list) {
      var node = list.head;
      if (node == null) return;
      var i = 0;
      while (node != null) {
        if (i == 4) {
          var movie = linkedList.getNodeData(node); //打印指定节点
          document.writeln(movie.id + "<br>");
          document.writeln(movie.name + "<br>");
          break;
        }
        i++;
        node = node.next;
      }
    }
  </script>

原文地址:https://www.cnblogs.com/fx2008/p/2226911.html