麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Node.js環境下JavaScript實現單鏈表與雙鏈表結構

2019-11-20 09:43:36
字體:
來源:轉載
供稿:網友

單鏈表(LinkedList)的javascript實現
npmjs相關庫:
complex-list、smart-list、singly-linked-list
編程思路:

  • add方法用于將元素追加到鏈表尾部,借由insert方法來實現;
  • 注意各個函數的邊界條件處理。

自己的實現:

SingleNode.js

(function(){ "use strict"; function Node(element){  this.element = element;  this.next = null; } module.exports = Node;})();

LinkedList.js

(function(){ "use strict"; var Node = require("./lib/SingleNode"); function LinkedList(){  this._head = new Node("This is Head Node.");  this._size = 0; } LinkedList.prototype.isEmpty = function(){  return this._size === 0; }; LinkedList.prototype.size = function(){  return this._size; }; LinkedList.prototype.getHead = function(){  return this._head; }; LinkedList.prototype.display = function(){  var currNode = this.getHead().next;  while(currNode){   console.log(currNode.element);   currNode = currNode.next;  } }; LinkedList.prototype.remove = function(item){  if(item) {   var preNode = this.findPre(item);   if(preNode == null)    return ;   if (preNode.next !== null) {    preNode.next = preNode.next.next;    this._size--;   }  } }; LinkedList.prototype.add = function(item){  this.insert(item); }; LinkedList.prototype.insert = function(newElement, item){  var newNode = new Node(newElement);  var finder = item ? this.find(item) : null;  if(!finder){   var last = this.findLast();   last.next = newNode;  }  else{   newNode.next = finder.next;   finder.next = newNode;  }  this._size++; }; /*********************** Utility Functions ********************************/ LinkedList.prototype.findLast = function(){  var currNode = this.getHead();  while(currNode.next){   currNode = currNode.next;  }  return currNode; }; LinkedList.prototype.findPre = function(item){  var currNode = this.getHead();  while(currNode.next !== null && currNode.next.element !== item){   currNode = currNode.next;  }  return currNode; }; LinkedList.prototype.find = function(item){  if(item == null)   return null;  var currNode = this.getHead();  while(currNode && currNode.element !== item){   currNode = currNode.next;  }  return currNode; }; module.exports = LinkedList;})();


雙鏈表(DoubleLinkedList)的javascript實現
npmjs相關庫:
complex-list、smart-list
編程思路:

  • 雙鏈表多了一個指向前趨的指針,故單鏈表中的輔助函數findPre就不需要了;
  • 增加了反向輸出方法;
  • 注意邊界條件的處理。

自己的實現
DoubleNode.js

(function(){ "use strict"; function Node(element){  this.element = element;  this.next = null;  this.previous = null; } module.exports = Node;})();

DoubleLinkedList.js

(function(){ "use strict"; var Node = require("./lib/DoubleNode"); function DoubleLinkedList(){  this._head = new Node("This is Head Node.");  this._size = 0; } DoubleLinkedList.prototype.getHead = function(){  return this._head; }; DoubleLinkedList.prototype.isEmpty = function(){  return this._size === 0; }; DoubleLinkedList.prototype.size = function(){  return this._size; }; DoubleLinkedList.prototype.findLast = function(){  var currNode = this.getHead();  while(currNode.next){   currNode = currNode.next;  }  return currNode; }; DoubleLinkedList.prototype.add = function(item){  if(item == null)   return null;  this.insert(item); }; DoubleLinkedList.prototype.remove = function(item){  if(item) {   var node = this.find(item);   if(node == null)    return ;   if (node.next === null) {    node.previous.next = null;    node.previous = null;   } else{    node.previous.next = node.next;    node.next.previous = node.previous;    node.next = null;    node.previous = null;   }   this._size--;  } }; DoubleLinkedList.prototype.find = function(item){  if(item == null)   return null;  var currNode = this.getHead();  while(currNode && currNode.element !== item){   currNode = currNode.next;  }  return currNode; }; DoubleLinkedList.prototype.insert = function(newElement, item){  var newNode = new Node(newElement);  var finder = item ? this.find(item) : null;  if(!finder){   var last = this.findLast();   newNode.previous = last;   last.next = newNode;  }  else{   newNode.next = finder.next;   newNode.previous = finder;   finder.next.previous = newNode;   finder.next = newNode;  }  this._size++; }; DoubleLinkedList.prototype.dispReverse = function(){  var currNode = this.findLast();  while(currNode != this.getHead()){   console.log(currNode.element);   currNode = currNode.previous;  } }; DoubleLinkedList.prototype.display = function(){  var currNode = this.getHead().next;  while(currNode){   console.log(currNode.element);   currNode = currNode.next;  } }; module.exports = DoubleLinkedList;})();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 激情在线免费观看 | 日韩黄色一区 | 久草在线最新 | 夜间福利网站 | 日本娇小videos高潮 | 久久www视频 | 国产精品视频免费在线观看 | 男人天堂新地址 | 亚洲福利视频52 | 免费看日韩片 | japanese xxxxhd| 好吊色欧美一区二区三区四区 | 二区视频 | 久久精品一区二区三 | 国产1区2区3区中文字幕 | 婷婷中文字幕一区二区三区 | 亚洲国产精品久久久久制服红楼梦 | 男女无套免费视频 | 伊人av影院 | 欧美日韩亚洲不卡 | 国产精品久久久久久久av三级 | 亚洲欧美不卡视频 | 日产精品久久久一区二区福利 | 一本色道久久综合亚洲精品图片 | 国产精品久久久久久久成人午夜 | 久久久久一本一区二区青青蜜月 | 泰剧19禁啪啪无遮挡大尺度 | 日本中文字幕高清 | 国产精品www| 亚洲欧美国产视频 | 91精品免费在线 | 国产一区精品在线观看 | 视频一区 在线 | 日日狠狠久久偷偷四色综合免费 | av免费在线观看免费 | 27xxoo无遮挡动态视频 | 日韩美香港a一级毛片免费 欧美一级淫片007 | 韩日黄色片 | 精品一区二区三区免费看 | 国产一区二区三区黄 | 毛片一区二区三区四区 |