doubly
Version:
Doubly linked list in TypeScript
65 lines • 1.96 kB
JavaScript
;
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