带你读《图解算法小抄》二、双向链表(1)https://developer.aliyun.com/article/1348314?groupCode=tech_library
1. 实现双向链表
1)Comparator
export default class Comparator { /** * 构造函数. * @param {function(a: *, b: *)} [compareFunction] - 可以是自定义的比较函数,该函数可以比较自定义的对象. */ constructor(compareFunction) { this.compare = compareFunction || Comparator.defaultCompareFunction; } /** * 默认比较函数。假设 "a" 和 "b" 是字符串或数字。 * @param {(string|number)} a * @param {(string|number)} b * @returns {number} */ static defaultCompareFunction(a, b) { if (a === b) { return 0; } return a < b ? -1 : 1; } /** * 检查两个变量是否相等。 * @param {*} a * @param {*} b * @return {boolean} */ equal(a, b) { return this.compare(a, b) === 0; } /** * 检查变量 "a" 是否小于 "b"。 * @param {*} a * @param {*} b * @return {boolean} */ lessThan(a, b) { return this.compare(a, b) < 0; } /** * 检查变量 "a" 是否大于 "b"。 * @param {*} a * @param {*} b * @return {boolean} */ greaterThan(a, b) { return this.compare(a, b) > 0; } /** * 检查变量 "a" 是否小于或等于 "b"。 * @param {*} a * @param {*} b * @return {boolean} */ lessThanOrEqual(a, b) { return this.lessThan(a, b) || this.equal(a, b); } /** * 检查变量 "a" 是否大于或等于 "b"。 * @param {*} a * @param {*} b * @return {boolean} */ greaterThanOrEqual(a, b) { return this.greaterThan(a, b) || this.equal(a, b); } /** * 反转比较顺序。 */ reverse() { const compareOriginal = this.compare; this.compare = (a, b) => compareOriginal(b, a); } }
2)DoublyLinkedListNode
export default class DoublyLinkedListNode { constructor(value, next = null, previous = null) { this.value = value; this.next = next; this.previous = previous; } toString(callback) { return callback ? callback(this.value) : `${this.value}`; } }
带你读《图解算法小抄》二、双向链表(3)https://developer.aliyun.com/article/1348311?groupCode=tech_library