国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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;})();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙坪坝区| 甘泉县| 金湖县| 武威市| 榆社县| 白城市| 东乡县| 黎平县| 磴口县| 绍兴县| 广州市| 古蔺县| 庆城县| 威远县| 黄龙县| 筠连县| 侯马市| 山阴县| 富宁县| 巴彦淖尔市| 诸暨市| 克山县| 庆元县| 杂多县| 普陀区| 武平县| 丹东市| 桦南县| 舒兰市| 蓝田县| 嘉义县| 苗栗县| 阜城县| 临城县| 清新县| 黄浦区| 泗洪县| 武胜县| 湘潭市| 武胜县| 宜城市|