UNPKG

doubly

Version:

Doubly linked list in TypeScript

65 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.nodeTraversePrevValues = exports.nodeTraverseNextValues = exports.nodeTraversePrevNodes = exports.nodeTraverseNextNodes = void 0; class Node { constructor(value, opts) { this.value = value; this.prev = (opts === null || opts === void 0 ? void 0 : opts.prev) || null; this.next = (opts === null || opts === void 0 ? void 0 : opts.next) || null; } linkNext(next) { this.next = next; if (next) next.prev = this; return next; } linkPrev(prev) { this.prev = prev; if (prev) prev.next = this; return prev; } unlink() { if (this.prev == null && this.next == null) return false; if (this.prev) this.prev.linkNext(this.next); if (this.next) this.next.linkPrev(this.prev); this.prev = null; this.next = null; return true; } } exports.default = Node; function* nodeTraverseNextNodes(node) { let cursor = node !== null && node !== void 0 ? node : null; while (cursor) { const next = cursor.next; yield cursor; cursor = next; } } exports.nodeTraverseNextNodes = nodeTraverseNextNodes; function* nodeTraversePrevNodes(node) { let cursor = node !== null && node !== void 0 ? node : null; while (cursor) { const prev = cursor.prev; yield cursor; cursor = prev; } } exports.nodeTraversePrevNodes = nodeTraversePrevNodes; function* nodeTraverseNextValues(node) { for (let n of nodeTraverseNextNodes(node)) { yield n.value; } } exports.nodeTraverseNextValues = nodeTraverseNextValues; function* nodeTraversePrevValues(node) { for (let n of nodeTraversePrevNodes(node)) { yield n.value; } } exports.nodeTraversePrevValues = nodeTraversePrevValues; //# sourceMappingURL=Node.js.map