起因
最近在看《数据结构与算法--javascript描述》,然后上npmjs.org去搜索,想找合适的库参考并记录下来,以备以后用时能拿来即用,最没有发现很合自己意的,于是就决定自己一一实现出来。
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;
})();
源代码地址
https://github.com/zhoutk/js-data-struct
http://git.oschina.net/zhoutk/jsDataStructs