UNPKG

@zenghawtin/graph2d

Version:

Javascript library for 2d geometry

67 lines (59 loc) 1.9 kB
import LinkedList from './linked_list'; /** * Class implements circular bidirectional linked list <br/> * LinkedListElement - object of any type that has properties next and prev. */ class CircularLinkedList extends LinkedList { constructor(first, last) { super(first, last); this.setCircularLinks(); } setCircularLinks() { if (this.isEmpty()) return; this.last.next = this.first; this.first.prev = this.last; } [Symbol.iterator]() { let element = undefined; return { next: () => { let value = element ? element : this.first; let done = this.first ? (element ? element === this.first : false) : true; element = value ? value.next : undefined; return {value: value, done: done}; } }; }; /** * Append new element to the end of the list * @param {LinkedListElement} element - new element to be appended * @returns {CircularLinkedList} */ append(element) { super.append(element); this.setCircularLinks(); return this; } /** * Insert new element to the list after elementBefore * @param {LinkedListElement} newElement - new element to be inserted * @param {LinkedListElement} elementBefore - element in the list to insert after it * @returns {CircularLinkedList} */ insert(newElement, elementBefore) { super.insert(newElement, elementBefore); this.setCircularLinks(); return this; } /** * Remove element from the list * @param {LinkedListElement} element - element to be removed from the list * @returns {CircularLinkedList} */ remove(element) { super.remove(element); // this.setCircularLinks(); return this; } } export default CircularLinkedList;