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>