data-structure-typed 2.4.5 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +3 -1
  7. package/README.md +78 -31
  8. package/dist/cjs/binary-tree.cjs +23698 -0
  9. package/dist/cjs/graph.cjs +5236 -0
  10. package/dist/cjs/hash.cjs +1262 -0
  11. package/dist/cjs/heap.cjs +1540 -0
  12. package/dist/cjs/index.cjs +24509 -2899
  13. package/dist/cjs/linked-list.cjs +4370 -0
  14. package/dist/cjs/matrix.cjs +1042 -0
  15. package/dist/cjs/priority-queue.cjs +1314 -0
  16. package/dist/cjs/queue.cjs +4090 -0
  17. package/dist/cjs/stack.cjs +861 -0
  18. package/dist/cjs/trie.cjs +1173 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +23730 -0
  20. package/dist/cjs-legacy/graph.cjs +5234 -0
  21. package/dist/cjs-legacy/hash.cjs +1262 -0
  22. package/dist/cjs-legacy/heap.cjs +1537 -0
  23. package/dist/cjs-legacy/index.cjs +32555 -10936
  24. package/dist/cjs-legacy/linked-list.cjs +4376 -0
  25. package/dist/cjs-legacy/matrix.cjs +1045 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1312 -0
  27. package/dist/cjs-legacy/queue.cjs +4088 -0
  28. package/dist/cjs-legacy/stack.cjs +861 -0
  29. package/dist/cjs-legacy/trie.cjs +1172 -0
  30. package/dist/esm/binary-tree.mjs +23683 -0
  31. package/dist/esm/graph.mjs +5223 -0
  32. package/dist/esm/hash.mjs +1259 -0
  33. package/dist/esm/heap.mjs +1534 -0
  34. package/dist/esm/index.mjs +24507 -2898
  35. package/dist/esm/linked-list.mjs +4363 -0
  36. package/dist/esm/matrix.mjs +1038 -0
  37. package/dist/esm/priority-queue.mjs +1310 -0
  38. package/dist/esm/queue.mjs +4086 -0
  39. package/dist/esm/stack.mjs +859 -0
  40. package/dist/esm/trie.mjs +1170 -0
  41. package/dist/esm-legacy/binary-tree.mjs +23715 -0
  42. package/dist/esm-legacy/graph.mjs +5221 -0
  43. package/dist/esm-legacy/hash.mjs +1259 -0
  44. package/dist/esm-legacy/heap.mjs +1531 -0
  45. package/dist/esm-legacy/index.mjs +32553 -10935
  46. package/dist/esm-legacy/linked-list.mjs +4369 -0
  47. package/dist/esm-legacy/matrix.mjs +1041 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1308 -0
  49. package/dist/esm-legacy/queue.mjs +4084 -0
  50. package/dist/esm-legacy/stack.mjs +859 -0
  51. package/dist/esm-legacy/trie.mjs +1169 -0
  52. package/dist/types/data-structures/base/index.d.ts +1 -0
  53. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  54. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  55. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  56. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +368 -51
  57. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +473 -147
  58. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +931 -80
  59. package/dist/types/data-structures/binary-tree/bst.d.ts +792 -29
  60. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +592 -32
  61. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +320 -135
  62. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3662 -6
  63. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3487 -201
  64. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2778 -65
  65. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3414 -6
  66. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  67. package/dist/types/data-structures/graph/directed-graph.d.ts +419 -47
  68. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +384 -59
  70. package/dist/types/data-structures/hash/hash-map.d.ts +462 -89
  71. package/dist/types/data-structures/heap/heap.d.ts +567 -99
  72. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  73. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  74. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +631 -49
  75. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +581 -68
  76. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +775 -12
  77. package/dist/types/data-structures/matrix/matrix.d.ts +491 -0
  78. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  79. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  80. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  81. package/dist/types/data-structures/queue/deque.d.ts +578 -71
  82. package/dist/types/data-structures/queue/queue.d.ts +451 -42
  83. package/dist/types/data-structures/stack/stack.d.ts +374 -32
  84. package/dist/types/data-structures/trie/trie.d.ts +458 -48
  85. package/dist/types/interfaces/graph.d.ts +1 -1
  86. package/dist/types/types/common.d.ts +2 -2
  87. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  88. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  89. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  90. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  91. package/dist/types/types/utils/validate-type.d.ts +4 -4
  92. package/dist/umd/data-structure-typed.js +32432 -10808
  93. package/dist/umd/data-structure-typed.min.js +10 -4
  94. package/docs-site-docusaurus/README.md +41 -0
  95. package/docs-site-docusaurus/docs/api/README.md +52 -0
  96. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
  97. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  98. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  99. package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
  100. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  101. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  102. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  103. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  104. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  105. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  106. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  107. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  108. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  109. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  110. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  111. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  112. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  113. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  116. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  117. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  118. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  119. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  120. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  121. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  122. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  123. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  124. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  125. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  126. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  127. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  128. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
  129. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  130. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  131. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  132. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  133. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  134. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
  135. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
  136. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
  137. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  138. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  139. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  140. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  141. package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
  142. package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
  143. package/docs-site-docusaurus/docs/guide/guides.md +611 -0
  144. package/docs-site-docusaurus/docs/guide/installation.md +60 -0
  145. package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
  146. package/docs-site-docusaurus/docs/guide/overview.md +638 -0
  147. package/docs-site-docusaurus/docs/guide/performance.md +833 -0
  148. package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
  149. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  150. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  151. package/docs-site-docusaurus/package-lock.json +18667 -0
  152. package/docs-site-docusaurus/package.json +50 -0
  153. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  154. package/docs-site-docusaurus/sidebars.ts +23 -0
  155. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  156. package/docs-site-docusaurus/src/css/custom.css +96 -0
  157. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  158. package/docs-site-docusaurus/src/pages/index.tsx +71 -0
  159. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  160. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  161. package/docs-site-docusaurus/static/.nojekyll +0 -0
  162. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  163. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  164. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  165. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  166. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  167. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  168. package/docs-site-docusaurus/static/img/logo.png +0 -0
  169. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  170. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  171. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  172. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  173. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  174. package/docs-site-docusaurus/static/robots.txt +4 -0
  175. package/docs-site-docusaurus/typedoc.json +23 -0
  176. package/package.json +109 -12
  177. package/src/data-structures/base/index.ts +1 -0
  178. package/src/data-structures/base/iterable-element-base.ts +4 -5
  179. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  180. package/src/data-structures/base/linear-base.ts +3 -3
  181. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  182. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  183. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  184. package/src/data-structures/binary-tree/bst.ts +840 -35
  185. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  186. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  187. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  188. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  189. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  190. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  191. package/src/data-structures/graph/abstract-graph.ts +4 -4
  192. package/src/data-structures/graph/directed-graph.ts +429 -47
  193. package/src/data-structures/graph/map-graph.ts +59 -1
  194. package/src/data-structures/graph/undirected-graph.ts +393 -59
  195. package/src/data-structures/hash/hash-map.ts +476 -92
  196. package/src/data-structures/heap/heap.ts +581 -99
  197. package/src/data-structures/heap/max-heap.ts +46 -0
  198. package/src/data-structures/heap/min-heap.ts +59 -0
  199. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  200. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  201. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  202. package/src/data-structures/matrix/matrix.ts +584 -12
  203. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  204. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  205. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  206. package/src/data-structures/queue/deque.ts +592 -70
  207. package/src/data-structures/queue/queue.ts +463 -42
  208. package/src/data-structures/stack/stack.ts +384 -32
  209. package/src/data-structures/trie/trie.ts +470 -48
  210. package/src/interfaces/graph.ts +1 -1
  211. package/src/types/common.ts +2 -2
  212. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  213. package/src/types/data-structures/heap/heap.ts +1 -0
  214. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  215. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  216. package/src/types/utils/validate-type.ts +4 -4
  217. package/vercel.json +6 -0
  218. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  219. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  220. package/dist/leetcode/avl-tree.mjs +0 -2720
  221. package/dist/leetcode/binary-tree.mjs +0 -1594
  222. package/dist/leetcode/bst.mjs +0 -2398
  223. package/dist/leetcode/deque.mjs +0 -683
  224. package/dist/leetcode/directed-graph.mjs +0 -1733
  225. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  226. package/dist/leetcode/hash-map.mjs +0 -493
  227. package/dist/leetcode/heap.mjs +0 -542
  228. package/dist/leetcode/max-heap.mjs +0 -375
  229. package/dist/leetcode/max-priority-queue.mjs +0 -383
  230. package/dist/leetcode/min-heap.mjs +0 -363
  231. package/dist/leetcode/min-priority-queue.mjs +0 -371
  232. package/dist/leetcode/priority-queue.mjs +0 -363
  233. package/dist/leetcode/queue.mjs +0 -943
  234. package/dist/leetcode/red-black-tree.mjs +0 -2765
  235. package/dist/leetcode/singly-linked-list.mjs +0 -754
  236. package/dist/leetcode/stack.mjs +0 -217
  237. package/dist/leetcode/tree-counter.mjs +0 -3039
  238. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  239. package/dist/leetcode/trie.mjs +0 -413
  240. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -1,754 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var IterableElementBase = class {
4
- static {
5
- __name(this, "IterableElementBase");
6
- }
7
- constructor(options) {
8
- if (options) {
9
- const { toElementFn } = options;
10
- if (typeof toElementFn === "function") this._toElementFn = toElementFn;
11
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
12
- }
13
- }
14
- _toElementFn;
15
- get toElementFn() {
16
- return this._toElementFn;
17
- }
18
- *[Symbol.iterator](...args) {
19
- yield* this._getIterator(...args);
20
- }
21
- *values() {
22
- for (const item of this) yield item;
23
- }
24
- every(predicate, thisArg) {
25
- let index = 0;
26
- for (const item of this) {
27
- if (thisArg === void 0) {
28
- if (!predicate(item, index++, this)) return false;
29
- } else {
30
- const fn = predicate;
31
- if (!fn.call(thisArg, item, index++, this)) return false;
32
- }
33
- }
34
- return true;
35
- }
36
- some(predicate, thisArg) {
37
- let index = 0;
38
- for (const item of this) {
39
- if (thisArg === void 0) {
40
- if (predicate(item, index++, this)) return true;
41
- } else {
42
- const fn = predicate;
43
- if (fn.call(thisArg, item, index++, this)) return true;
44
- }
45
- }
46
- return false;
47
- }
48
- forEach(callbackfn, thisArg) {
49
- let index = 0;
50
- for (const item of this) {
51
- if (thisArg === void 0) {
52
- callbackfn(item, index++, this);
53
- } else {
54
- const fn = callbackfn;
55
- fn.call(thisArg, item, index++, this);
56
- }
57
- }
58
- }
59
- find(predicate, thisArg) {
60
- let index = 0;
61
- for (const item of this) {
62
- if (thisArg === void 0) {
63
- if (predicate(item, index++, this)) return item;
64
- } else {
65
- const fn = predicate;
66
- if (fn.call(thisArg, item, index++, this)) return item;
67
- }
68
- }
69
- return;
70
- }
71
- has(element) {
72
- for (const ele of this) if (ele === element) return true;
73
- return false;
74
- }
75
- reduce(callbackfn, initialValue) {
76
- let index = 0;
77
- const iter = this[Symbol.iterator]();
78
- let acc;
79
- if (arguments.length >= 2) {
80
- acc = initialValue;
81
- } else {
82
- const first = iter.next();
83
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
84
- acc = first.value;
85
- index = 1;
86
- }
87
- for (const value of iter) {
88
- acc = callbackfn(acc, value, index++, this);
89
- }
90
- return acc;
91
- }
92
- toArray() {
93
- return [...this];
94
- }
95
- toVisual() {
96
- return [...this];
97
- }
98
- print() {
99
- console.log(this.toVisual());
100
- }
101
- };
102
- var LinkedListNode = class {
103
- static {
104
- __name(this, "LinkedListNode");
105
- }
106
- constructor(value) {
107
- this._value = value;
108
- this._next = void 0;
109
- }
110
- _value;
111
- get value() {
112
- return this._value;
113
- }
114
- set value(value) {
115
- this._value = value;
116
- }
117
- _next;
118
- get next() {
119
- return this._next;
120
- }
121
- set next(value) {
122
- this._next = value;
123
- }
124
- };
125
- var LinearBase = class _LinearBase extends IterableElementBase {
126
- static {
127
- __name(this, "LinearBase");
128
- }
129
- constructor(options) {
130
- super(options);
131
- if (options) {
132
- const { maxLen } = options;
133
- if (typeof maxLen === "number" && maxLen > 0 && maxLen % 1 === 0) this._maxLen = maxLen;
134
- }
135
- }
136
- _maxLen = -1;
137
- get maxLen() {
138
- return this._maxLen;
139
- }
140
- indexOf(searchElement, fromIndex = 0) {
141
- if (this.length === 0) return -1;
142
- if (fromIndex < 0) fromIndex = this.length + fromIndex;
143
- if (fromIndex < 0) fromIndex = 0;
144
- for (let i = fromIndex; i < this.length; i++) {
145
- const element = this.at(i);
146
- if (element === searchElement) return i;
147
- }
148
- return -1;
149
- }
150
- lastIndexOf(searchElement, fromIndex = this.length - 1) {
151
- if (this.length === 0) return -1;
152
- if (fromIndex >= this.length) fromIndex = this.length - 1;
153
- if (fromIndex < 0) fromIndex = this.length + fromIndex;
154
- for (let i = fromIndex; i >= 0; i--) {
155
- const element = this.at(i);
156
- if (element === searchElement) return i;
157
- }
158
- return -1;
159
- }
160
- findIndex(predicate, thisArg) {
161
- for (let i = 0; i < this.length; i++) {
162
- const item = this.at(i);
163
- if (item !== void 0 && predicate.call(thisArg, item, i, this)) return i;
164
- }
165
- return -1;
166
- }
167
- concat(...items) {
168
- const newList = this.clone();
169
- for (const item of items) {
170
- if (item instanceof _LinearBase) {
171
- newList.pushMany(item);
172
- } else {
173
- newList.push(item);
174
- }
175
- }
176
- return newList;
177
- }
178
- sort(compareFn) {
179
- const arr = this.toArray();
180
- arr.sort(compareFn);
181
- this.clear();
182
- for (const item of arr) this.push(item);
183
- return this;
184
- }
185
- splice(start, deleteCount = 0, ...items) {
186
- const removedList = this._createInstance();
187
- start = start < 0 ? this.length + start : start;
188
- start = Math.max(0, Math.min(start, this.length));
189
- deleteCount = Math.max(0, Math.min(deleteCount, this.length - start));
190
- for (let i = 0; i < deleteCount; i++) {
191
- const removed = this.deleteAt(start);
192
- if (removed !== void 0) {
193
- removedList.push(removed);
194
- }
195
- }
196
- for (let i = 0; i < items.length; i++) {
197
- this.addAt(start + i, items[i]);
198
- }
199
- return removedList;
200
- }
201
- join(separator = ",") {
202
- return this.toArray().join(separator);
203
- }
204
- toReversedArray() {
205
- const array = [];
206
- for (let i = this.length - 1; i >= 0; i--) {
207
- array.push(this.at(i));
208
- }
209
- return array;
210
- }
211
- reduceRight(callbackfn, initialValue) {
212
- let accumulator = initialValue ?? 0;
213
- for (let i = this.length - 1; i >= 0; i--) {
214
- accumulator = callbackfn(accumulator, this.at(i), i, this);
215
- }
216
- return accumulator;
217
- }
218
- slice(start = 0, end = this.length) {
219
- start = start < 0 ? this.length + start : start;
220
- end = end < 0 ? this.length + end : end;
221
- const newList = this._createInstance();
222
- for (let i = start; i < end; i++) {
223
- newList.push(this.at(i));
224
- }
225
- return newList;
226
- }
227
- fill(value, start = 0, end = this.length) {
228
- start = start < 0 ? this.length + start : start;
229
- end = end < 0 ? this.length + end : end;
230
- if (start < 0) start = 0;
231
- if (end > this.length) end = this.length;
232
- if (start >= end) return this;
233
- for (let i = start; i < end; i++) {
234
- this.setAt(i, value);
235
- }
236
- return this;
237
- }
238
- };
239
- var LinearLinkedBase = class extends LinearBase {
240
- static {
241
- __name(this, "LinearLinkedBase");
242
- }
243
- constructor(options) {
244
- super(options);
245
- if (options) {
246
- const { maxLen } = options;
247
- if (typeof maxLen === "number" && maxLen > 0 && maxLen % 1 === 0) this._maxLen = maxLen;
248
- }
249
- }
250
- indexOf(searchElement, fromIndex = 0) {
251
- const iterator = this._getIterator();
252
- let current = iterator.next();
253
- let index = 0;
254
- while (index < fromIndex) {
255
- current = iterator.next();
256
- index++;
257
- }
258
- while (!current.done) {
259
- if (current.value === searchElement) return index;
260
- current = iterator.next();
261
- index++;
262
- }
263
- return -1;
264
- }
265
- lastIndexOf(searchElement, fromIndex = this.length - 1) {
266
- const iterator = this._getReverseIterator();
267
- let current = iterator.next();
268
- let index = this.length - 1;
269
- while (index > fromIndex) {
270
- current = iterator.next();
271
- index--;
272
- }
273
- while (!current.done) {
274
- if (current.value === searchElement) return index;
275
- current = iterator.next();
276
- index--;
277
- }
278
- return -1;
279
- }
280
- concat(...items) {
281
- const newList = this.clone();
282
- for (const item of items) {
283
- if (item instanceof LinearBase) {
284
- newList.pushMany(item);
285
- } else {
286
- newList.push(item);
287
- }
288
- }
289
- return newList;
290
- }
291
- slice(start = 0, end = this.length) {
292
- start = start < 0 ? this.length + start : start;
293
- end = end < 0 ? this.length + end : end;
294
- const newList = this._createInstance();
295
- const iterator = this._getIterator();
296
- let current = iterator.next();
297
- let c = 0;
298
- while (c < start) {
299
- current = iterator.next();
300
- c++;
301
- }
302
- for (let i = start; i < end; i++) {
303
- newList.push(current.value);
304
- current = iterator.next();
305
- }
306
- return newList;
307
- }
308
- splice(start, deleteCount = 0, ...items) {
309
- const removedList = this._createInstance();
310
- start = start < 0 ? this.length + start : start;
311
- start = Math.max(0, Math.min(start, this.length));
312
- deleteCount = Math.max(0, deleteCount);
313
- let currentIndex = 0;
314
- let currentNode = void 0;
315
- let previousNode = void 0;
316
- const iterator = this._getNodeIterator();
317
- for (const node of iterator) {
318
- if (currentIndex === start) {
319
- currentNode = node;
320
- break;
321
- }
322
- previousNode = node;
323
- currentIndex++;
324
- }
325
- for (let i = 0; i < deleteCount && currentNode; i++) {
326
- removedList.push(currentNode.value);
327
- const nextNode = currentNode.next;
328
- this.delete(currentNode);
329
- currentNode = nextNode;
330
- }
331
- for (let i = 0; i < items.length; i++) {
332
- if (previousNode) {
333
- this.addAfter(previousNode, items[i]);
334
- previousNode = previousNode.next;
335
- } else {
336
- this.addAt(0, items[i]);
337
- previousNode = this._getNodeIterator().next().value;
338
- }
339
- }
340
- return removedList;
341
- }
342
- reduceRight(callbackfn, initialValue) {
343
- let accumulator = initialValue ?? 0;
344
- let index = this.length - 1;
345
- for (const item of this._getReverseIterator()) {
346
- accumulator = callbackfn(accumulator, item, index--, this);
347
- }
348
- return accumulator;
349
- }
350
- };
351
- var SinglyLinkedListNode = class extends LinkedListNode {
352
- static {
353
- __name(this, "SinglyLinkedListNode");
354
- }
355
- constructor(value) {
356
- super(value);
357
- this._value = value;
358
- this._next = void 0;
359
- }
360
- _next;
361
- get next() {
362
- return this._next;
363
- }
364
- set next(value) {
365
- this._next = value;
366
- }
367
- };
368
- var SinglyLinkedList = class extends LinearLinkedBase {
369
- static {
370
- __name(this, "SinglyLinkedList");
371
- }
372
- _equals = Object.is;
373
- constructor(elements = [], options) {
374
- super(options);
375
- this.pushMany(elements);
376
- }
377
- _head;
378
- get head() {
379
- return this._head;
380
- }
381
- _tail;
382
- get tail() {
383
- return this._tail;
384
- }
385
- _length = 0;
386
- get length() {
387
- return this._length;
388
- }
389
- get first() {
390
- return this.head?.value;
391
- }
392
- get last() {
393
- return this.tail?.value;
394
- }
395
- static from(data, options) {
396
- const list = new this([], options);
397
- for (const x of data) list.push(x);
398
- return list;
399
- }
400
- push(elementOrNode) {
401
- const newNode = this._ensureNode(elementOrNode);
402
- if (!this.head) {
403
- this._head = this._tail = newNode;
404
- } else {
405
- this.tail.next = newNode;
406
- this._tail = newNode;
407
- }
408
- this._length++;
409
- if (this._maxLen > 0 && this.length > this._maxLen) this.shift();
410
- return true;
411
- }
412
- pop() {
413
- if (!this.head) return void 0;
414
- if (this.head === this.tail) {
415
- const value2 = this.head.value;
416
- this._head = void 0;
417
- this._tail = void 0;
418
- this._length--;
419
- return value2;
420
- }
421
- let current = this.head;
422
- while (current.next !== this.tail) current = current.next;
423
- const value = this.tail.value;
424
- current.next = void 0;
425
- this._tail = current;
426
- this._length--;
427
- return value;
428
- }
429
- shift() {
430
- if (!this.head) return void 0;
431
- const removed = this.head;
432
- this._head = this.head.next;
433
- if (!this._head) this._tail = void 0;
434
- this._length--;
435
- return removed.value;
436
- }
437
- unshift(elementOrNode) {
438
- const newNode = this._ensureNode(elementOrNode);
439
- if (!this.head) {
440
- this._head = this._tail = newNode;
441
- } else {
442
- newNode.next = this.head;
443
- this._head = newNode;
444
- }
445
- this._length++;
446
- return true;
447
- }
448
- pushMany(elements) {
449
- const ans = [];
450
- for (const el of elements) {
451
- if (this.toElementFn) ans.push(this.push(this.toElementFn(el)));
452
- else ans.push(this.push(el));
453
- }
454
- return ans;
455
- }
456
- unshiftMany(elements) {
457
- const ans = [];
458
- for (const el of elements) {
459
- if (this.toElementFn) ans.push(this.unshift(this.toElementFn(el)));
460
- else ans.push(this.unshift(el));
461
- }
462
- return ans;
463
- }
464
- search(elementNodeOrPredicate) {
465
- const predicate = this._ensurePredicate(elementNodeOrPredicate);
466
- let current = this.head;
467
- while (current) {
468
- if (predicate(current)) return current.value;
469
- current = current.next;
470
- }
471
- return void 0;
472
- }
473
- at(index) {
474
- if (index < 0 || index >= this._length) return void 0;
475
- let current = this.head;
476
- for (let i = 0; i < index; i++) current = current.next;
477
- return current.value;
478
- }
479
- isNode(elementNodeOrPredicate) {
480
- return elementNodeOrPredicate instanceof SinglyLinkedListNode;
481
- }
482
- getNodeAt(index) {
483
- if (index < 0 || index >= this._length) return void 0;
484
- let current = this.head;
485
- for (let i = 0; i < index; i++) current = current.next;
486
- return current;
487
- }
488
- deleteAt(index) {
489
- if (index < 0 || index >= this._length) return void 0;
490
- if (index === 0) return this.shift();
491
- const targetNode = this.getNodeAt(index);
492
- const prevNode = this._getPrevNode(targetNode);
493
- const value = targetNode.value;
494
- prevNode.next = targetNode.next;
495
- if (targetNode === this.tail) this._tail = prevNode;
496
- this._length--;
497
- return value;
498
- }
499
- delete(elementOrNode) {
500
- if (elementOrNode === void 0 || !this.head) return false;
501
- const node = this.isNode(elementOrNode) ? elementOrNode : this.getNode(elementOrNode);
502
- if (!node) return false;
503
- const prevNode = this._getPrevNode(node);
504
- if (!prevNode) {
505
- this._head = node.next;
506
- if (node === this.tail) this._tail = void 0;
507
- } else {
508
- prevNode.next = node.next;
509
- if (node === this.tail) this._tail = prevNode;
510
- }
511
- this._length--;
512
- return true;
513
- }
514
- addAt(index, newElementOrNode) {
515
- if (index < 0 || index > this._length) return false;
516
- if (index === 0) return this.unshift(newElementOrNode);
517
- if (index === this._length) return this.push(newElementOrNode);
518
- const newNode = this._ensureNode(newElementOrNode);
519
- const prevNode = this.getNodeAt(index - 1);
520
- newNode.next = prevNode.next;
521
- prevNode.next = newNode;
522
- this._length++;
523
- return true;
524
- }
525
- setAt(index, value) {
526
- const node = this.getNodeAt(index);
527
- if (!node) return false;
528
- node.value = value;
529
- return true;
530
- }
531
- isEmpty() {
532
- return this._length === 0;
533
- }
534
- clear() {
535
- this._head = void 0;
536
- this._tail = void 0;
537
- this._length = 0;
538
- }
539
- reverse() {
540
- if (!this.head || this.head === this.tail) return this;
541
- let prev;
542
- let current = this.head;
543
- let next;
544
- while (current) {
545
- next = current.next;
546
- current.next = prev;
547
- prev = current;
548
- current = next;
549
- }
550
- [this._head, this._tail] = [this.tail, this.head];
551
- return this;
552
- }
553
- getNode(elementNodeOrPredicate) {
554
- if (elementNodeOrPredicate === void 0) return;
555
- if (this.isNode(elementNodeOrPredicate)) return elementNodeOrPredicate;
556
- const predicate = this._ensurePredicate(elementNodeOrPredicate);
557
- let current = this.head;
558
- while (current) {
559
- if (predicate(current)) return current;
560
- current = current.next;
561
- }
562
- return void 0;
563
- }
564
- addBefore(existingElementOrNode, newElementOrNode) {
565
- const existingNode = this.getNode(existingElementOrNode);
566
- if (!existingNode) return false;
567
- const prevNode = this._getPrevNode(existingNode);
568
- const newNode = this._ensureNode(newElementOrNode);
569
- if (!prevNode) {
570
- newNode.next = this._head;
571
- this._head = newNode;
572
- if (!this._tail) this._tail = newNode;
573
- this._length++;
574
- } else {
575
- prevNode.next = newNode;
576
- newNode.next = existingNode;
577
- this._length++;
578
- }
579
- return true;
580
- }
581
- addAfter(existingElementOrNode, newElementOrNode) {
582
- const existingNode = this.getNode(existingElementOrNode);
583
- if (!existingNode) return false;
584
- const newNode = this._ensureNode(newElementOrNode);
585
- newNode.next = existingNode.next;
586
- existingNode.next = newNode;
587
- if (existingNode === this.tail) this._tail = newNode;
588
- this._length++;
589
- return true;
590
- }
591
- splice(start, deleteCount = 0, ...items) {
592
- start = Math.max(0, Math.min(start, this.length));
593
- deleteCount = Math.max(0, deleteCount);
594
- const removedList = this._createInstance();
595
- const prevNode = start === 0 ? void 0 : this.getNodeAt(start - 1);
596
- let cur = prevNode ? prevNode.next : this.head;
597
- let removedCount = 0;
598
- while (removedCount < deleteCount && cur) {
599
- removedList.push(cur.value);
600
- cur = cur.next;
601
- removedCount++;
602
- }
603
- const afterNode = cur;
604
- if (prevNode) {
605
- prevNode.next = afterNode;
606
- } else {
607
- this._head = afterNode;
608
- }
609
- if (!afterNode) this._tail = prevNode;
610
- if (items.length > 0) {
611
- let firstInserted;
612
- let lastInserted;
613
- for (const it of items) {
614
- const node = this._ensureNode(it);
615
- if (!firstInserted) firstInserted = node;
616
- if (lastInserted) lastInserted.next = node;
617
- lastInserted = node;
618
- }
619
- if (prevNode) prevNode.next = firstInserted;
620
- else this._head = firstInserted;
621
- lastInserted.next = afterNode;
622
- if (!afterNode) this._tail = lastInserted;
623
- }
624
- this._length += items.length - removedCount;
625
- if (this._length === 0) {
626
- this._head = void 0;
627
- this._tail = void 0;
628
- }
629
- return removedList;
630
- }
631
- countOccurrences(elementOrNode) {
632
- const predicate = elementOrPredicate(elementOrNode, this._equals);
633
- let count = 0;
634
- let current = this.head;
635
- while (current) {
636
- if (predicate(current)) count++;
637
- current = current.next;
638
- }
639
- return count;
640
- }
641
- setEquality(equals) {
642
- this._equals = equals;
643
- return this;
644
- }
645
- deleteWhere(predicate) {
646
- let prev;
647
- let current = this.head;
648
- let i = 0;
649
- while (current) {
650
- if (predicate(current.value, i++, this)) {
651
- if (!prev) {
652
- this._head = current.next;
653
- if (current === this._tail) this._tail = void 0;
654
- } else {
655
- prev.next = current.next;
656
- if (current === this._tail) this._tail = prev;
657
- }
658
- this._length--;
659
- return true;
660
- }
661
- prev = current;
662
- current = current.next;
663
- }
664
- return false;
665
- }
666
- clone() {
667
- const out = this._createInstance();
668
- for (const v of this) out.push(v);
669
- return out;
670
- }
671
- filter(callback, thisArg) {
672
- const out = this._createInstance();
673
- let index = 0;
674
- for (const value of this) if (callback.call(thisArg, value, index++, this)) out.push(value);
675
- return out;
676
- }
677
- mapSame(callback, thisArg) {
678
- const out = this._createInstance();
679
- let index = 0;
680
- for (const value of this) {
681
- const mv = thisArg === void 0 ? callback(value, index++, this) : callback.call(thisArg, value, index++, this);
682
- out.push(mv);
683
- }
684
- return out;
685
- }
686
- map(callback, options, thisArg) {
687
- const out = this._createLike([], { ...options ?? {}, maxLen: this._maxLen });
688
- let index = 0;
689
- for (const value of this) out.push(callback.call(thisArg, value, index++, this));
690
- return out;
691
- }
692
- createNode(value) {
693
- return new SinglyLinkedListNode(value);
694
- }
695
- _isPredicate(elementNodeOrPredicate) {
696
- return typeof elementNodeOrPredicate === "function";
697
- }
698
- _ensureNode(elementOrNode) {
699
- if (this.isNode(elementOrNode)) return elementOrNode;
700
- return this.createNode(elementOrNode);
701
- }
702
- _ensurePredicate(elementNodeOrPredicate) {
703
- if (this.isNode(elementNodeOrPredicate)) return (node) => node === elementNodeOrPredicate;
704
- if (this._isPredicate(elementNodeOrPredicate)) return elementNodeOrPredicate;
705
- const value = elementNodeOrPredicate;
706
- return (node) => this._equals(node.value, value);
707
- }
708
- _getPrevNode(node) {
709
- if (!this.head || this.head === node) return void 0;
710
- let current = this.head;
711
- while (current.next && current.next !== node) current = current.next;
712
- return current.next === node ? current : void 0;
713
- }
714
- *_getIterator() {
715
- let current = this.head;
716
- while (current) {
717
- yield current.value;
718
- current = current.next;
719
- }
720
- }
721
- *_getReverseIterator() {
722
- const reversedArr = [...this].reverse();
723
- for (const item of reversedArr) yield item;
724
- }
725
- *_getNodeIterator() {
726
- let current = this.head;
727
- while (current) {
728
- yield current;
729
- current = current.next;
730
- }
731
- }
732
- _createInstance(options) {
733
- const Ctor = this.constructor;
734
- return new Ctor([], options);
735
- }
736
- _createLike(elements = [], options) {
737
- const Ctor = this.constructor;
738
- return new Ctor(elements, options);
739
- }
740
- _spawnLike(options) {
741
- return this._createLike([], options);
742
- }
743
- };
744
- function elementOrPredicate(input, equals) {
745
- if (input instanceof SinglyLinkedListNode) return (node) => node === input;
746
- if (typeof input === "function") return input;
747
- const value = input;
748
- return (node) => equals(node.value, value);
749
- }
750
- __name(elementOrPredicate, "elementOrPredicate");
751
- export {
752
- SinglyLinkedList,
753
- SinglyLinkedListNode
754
- };