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.
- package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
- package/CHANGELOG.md +3 -1
- package/README.md +78 -31
- package/dist/cjs/binary-tree.cjs +23698 -0
- package/dist/cjs/graph.cjs +5236 -0
- package/dist/cjs/hash.cjs +1262 -0
- package/dist/cjs/heap.cjs +1540 -0
- package/dist/cjs/index.cjs +24509 -2899
- package/dist/cjs/linked-list.cjs +4370 -0
- package/dist/cjs/matrix.cjs +1042 -0
- package/dist/cjs/priority-queue.cjs +1314 -0
- package/dist/cjs/queue.cjs +4090 -0
- package/dist/cjs/stack.cjs +861 -0
- package/dist/cjs/trie.cjs +1173 -0
- package/dist/cjs-legacy/binary-tree.cjs +23730 -0
- package/dist/cjs-legacy/graph.cjs +5234 -0
- package/dist/cjs-legacy/hash.cjs +1262 -0
- package/dist/cjs-legacy/heap.cjs +1537 -0
- package/dist/cjs-legacy/index.cjs +32555 -10936
- package/dist/cjs-legacy/linked-list.cjs +4376 -0
- package/dist/cjs-legacy/matrix.cjs +1045 -0
- package/dist/cjs-legacy/priority-queue.cjs +1312 -0
- package/dist/cjs-legacy/queue.cjs +4088 -0
- package/dist/cjs-legacy/stack.cjs +861 -0
- package/dist/cjs-legacy/trie.cjs +1172 -0
- package/dist/esm/binary-tree.mjs +23683 -0
- package/dist/esm/graph.mjs +5223 -0
- package/dist/esm/hash.mjs +1259 -0
- package/dist/esm/heap.mjs +1534 -0
- package/dist/esm/index.mjs +24507 -2898
- package/dist/esm/linked-list.mjs +4363 -0
- package/dist/esm/matrix.mjs +1038 -0
- package/dist/esm/priority-queue.mjs +1310 -0
- package/dist/esm/queue.mjs +4086 -0
- package/dist/esm/stack.mjs +859 -0
- package/dist/esm/trie.mjs +1170 -0
- package/dist/esm-legacy/binary-tree.mjs +23715 -0
- package/dist/esm-legacy/graph.mjs +5221 -0
- package/dist/esm-legacy/hash.mjs +1259 -0
- package/dist/esm-legacy/heap.mjs +1531 -0
- package/dist/esm-legacy/index.mjs +32553 -10935
- package/dist/esm-legacy/linked-list.mjs +4369 -0
- package/dist/esm-legacy/matrix.mjs +1041 -0
- package/dist/esm-legacy/priority-queue.mjs +1308 -0
- package/dist/esm-legacy/queue.mjs +4084 -0
- package/dist/esm-legacy/stack.mjs +859 -0
- package/dist/esm-legacy/trie.mjs +1169 -0
- package/dist/types/data-structures/base/index.d.ts +1 -0
- package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
- package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
- package/dist/types/data-structures/base/linear-base.d.ts +3 -3
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +368 -51
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +473 -147
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +931 -80
- package/dist/types/data-structures/binary-tree/bst.d.ts +792 -29
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +592 -32
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +320 -135
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +3662 -6
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3487 -201
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2778 -65
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +3414 -6
- package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
- package/dist/types/data-structures/graph/directed-graph.d.ts +419 -47
- package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +384 -59
- package/dist/types/data-structures/hash/hash-map.d.ts +462 -89
- package/dist/types/data-structures/heap/heap.d.ts +567 -99
- package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
- package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +631 -49
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +581 -68
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +775 -12
- package/dist/types/data-structures/matrix/matrix.d.ts +491 -0
- package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
- package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
- package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
- package/dist/types/data-structures/queue/deque.d.ts +578 -71
- package/dist/types/data-structures/queue/queue.d.ts +451 -42
- package/dist/types/data-structures/stack/stack.d.ts +374 -32
- package/dist/types/data-structures/trie/trie.d.ts +458 -48
- package/dist/types/interfaces/graph.d.ts +1 -1
- package/dist/types/types/common.d.ts +2 -2
- package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
- package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
- package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
- package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
- package/dist/types/types/utils/validate-type.d.ts +4 -4
- package/dist/umd/data-structure-typed.js +32432 -10808
- package/dist/umd/data-structure-typed.min.js +10 -4
- package/docs-site-docusaurus/README.md +41 -0
- package/docs-site-docusaurus/docs/api/README.md +52 -0
- package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
- package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
- package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
- package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
- package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
- package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
- package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
- package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
- package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
- package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
- package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
- package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
- package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
- package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
- package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
- package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
- package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
- package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
- package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
- package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
- package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
- package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
- package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
- package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
- package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
- package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
- package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
- package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
- package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
- package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
- package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
- package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
- package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
- package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
- package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
- package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
- package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
- package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
- package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
- package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
- package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
- package/docs-site-docusaurus/docs/guide/guides.md +611 -0
- package/docs-site-docusaurus/docs/guide/installation.md +60 -0
- package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
- package/docs-site-docusaurus/docs/guide/overview.md +638 -0
- package/docs-site-docusaurus/docs/guide/performance.md +833 -0
- package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
- package/docs-site-docusaurus/docusaurus.config.ts +159 -0
- package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
- package/docs-site-docusaurus/package-lock.json +18667 -0
- package/docs-site-docusaurus/package.json +50 -0
- package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
- package/docs-site-docusaurus/sidebars.ts +23 -0
- package/docs-site-docusaurus/sort-protected.mjs +87 -0
- package/docs-site-docusaurus/src/css/custom.css +96 -0
- package/docs-site-docusaurus/src/pages/index.module.css +13 -0
- package/docs-site-docusaurus/src/pages/index.tsx +71 -0
- package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
- package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
- package/docs-site-docusaurus/static/.nojekyll +0 -0
- package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
- package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
- package/docs-site-docusaurus/static/img/favicon.ico +0 -0
- package/docs-site-docusaurus/static/img/favicon.png +0 -0
- package/docs-site-docusaurus/static/img/logo-180.png +0 -0
- package/docs-site-docusaurus/static/img/logo.jpg +0 -0
- package/docs-site-docusaurus/static/img/logo.png +0 -0
- package/docs-site-docusaurus/static/img/logo.svg +1 -0
- package/docs-site-docusaurus/static/img/og-image.png +0 -0
- package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
- package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
- package/docs-site-docusaurus/static/robots.txt +4 -0
- package/docs-site-docusaurus/typedoc.json +23 -0
- package/package.json +109 -12
- package/src/data-structures/base/index.ts +1 -0
- package/src/data-structures/base/iterable-element-base.ts +4 -5
- package/src/data-structures/base/iterable-entry-base.ts +8 -8
- package/src/data-structures/base/linear-base.ts +3 -3
- package/src/data-structures/binary-tree/avl-tree.ts +386 -51
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
- package/src/data-structures/binary-tree/binary-tree.ts +956 -81
- package/src/data-structures/binary-tree/bst.ts +840 -35
- package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
- package/src/data-structures/binary-tree/segment-tree.ts +498 -249
- package/src/data-structures/binary-tree/tree-map.ts +3784 -7
- package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
- package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
- package/src/data-structures/binary-tree/tree-set.ts +3531 -10
- package/src/data-structures/graph/abstract-graph.ts +4 -4
- package/src/data-structures/graph/directed-graph.ts +429 -47
- package/src/data-structures/graph/map-graph.ts +59 -1
- package/src/data-structures/graph/undirected-graph.ts +393 -59
- package/src/data-structures/hash/hash-map.ts +476 -92
- package/src/data-structures/heap/heap.ts +581 -99
- package/src/data-structures/heap/max-heap.ts +46 -0
- package/src/data-structures/heap/min-heap.ts +59 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
- package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
- package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
- package/src/data-structures/matrix/matrix.ts +584 -12
- package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
- package/src/data-structures/priority-queue/priority-queue.ts +60 -0
- package/src/data-structures/queue/deque.ts +592 -70
- package/src/data-structures/queue/queue.ts +463 -42
- package/src/data-structures/stack/stack.ts +384 -32
- package/src/data-structures/trie/trie.ts +470 -48
- package/src/interfaces/graph.ts +1 -1
- package/src/types/common.ts +2 -2
- package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
- package/src/types/data-structures/heap/heap.ts +1 -0
- package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
- package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
- package/src/types/utils/validate-type.ts +4 -4
- package/vercel.json +6 -0
- package/dist/leetcode/avl-tree-counter.mjs +0 -2957
- package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
- package/dist/leetcode/avl-tree.mjs +0 -2720
- package/dist/leetcode/binary-tree.mjs +0 -1594
- package/dist/leetcode/bst.mjs +0 -2398
- package/dist/leetcode/deque.mjs +0 -683
- package/dist/leetcode/directed-graph.mjs +0 -1733
- package/dist/leetcode/doubly-linked-list.mjs +0 -709
- package/dist/leetcode/hash-map.mjs +0 -493
- package/dist/leetcode/heap.mjs +0 -542
- package/dist/leetcode/max-heap.mjs +0 -375
- package/dist/leetcode/max-priority-queue.mjs +0 -383
- package/dist/leetcode/min-heap.mjs +0 -363
- package/dist/leetcode/min-priority-queue.mjs +0 -371
- package/dist/leetcode/priority-queue.mjs +0 -363
- package/dist/leetcode/queue.mjs +0 -943
- package/dist/leetcode/red-black-tree.mjs +0 -2765
- package/dist/leetcode/singly-linked-list.mjs +0 -754
- package/dist/leetcode/stack.mjs +0 -217
- package/dist/leetcode/tree-counter.mjs +0 -3039
- package/dist/leetcode/tree-multi-map.mjs +0 -2913
- package/dist/leetcode/trie.mjs +0 -413
- package/dist/leetcode/undirected-graph.mjs +0 -1650
|
@@ -46,71 +46,6 @@ export declare class SinglyLinkedListNode<E = any> extends LinkedListNode<E> {
|
|
|
46
46
|
* 4. High Efficiency in Insertion and Deletion: Adding or removing elements in a linked list does not require moving other elements, making these operations more efficient than in arrays.
|
|
47
47
|
* Caution: Although our linked list classes provide methods such as at, setAt, addAt, and indexOf that are based on array indices, their time complexity, like that of the native Array.lastIndexOf, is 𝑂(𝑛). If you need to use these methods frequently, you might want to consider other data structures, such as Deque or Queue (designed for random access). Similarly, since the native Array.shift method has a time complexity of 𝑂(𝑛), using an array to simulate a queue can be inefficient. In such cases, you should use Queue or Deque, as these data structures leverage deferred array rearrangement, effectively reducing the average time complexity to 𝑂(1).
|
|
48
48
|
* @example
|
|
49
|
-
* // basic SinglyLinkedList creation and push operation
|
|
50
|
-
* // Create a simple SinglyLinkedList with initial values
|
|
51
|
-
* const list = new SinglyLinkedList([1, 2, 3, 4, 5]);
|
|
52
|
-
*
|
|
53
|
-
* // Verify the list maintains insertion order
|
|
54
|
-
* console.log([...list]); // [1, 2, 3, 4, 5];
|
|
55
|
-
*
|
|
56
|
-
* // Check length
|
|
57
|
-
* console.log(list.length); // 5;
|
|
58
|
-
*
|
|
59
|
-
* // Push a new element to the end
|
|
60
|
-
* list.push(6);
|
|
61
|
-
* console.log(list.length); // 6;
|
|
62
|
-
* console.log([...list]); // [1, 2, 3, 4, 5, 6];
|
|
63
|
-
* @example
|
|
64
|
-
* // SinglyLinkedList pop and shift operations
|
|
65
|
-
* const list = new SinglyLinkedList<number>([10, 20, 30, 40, 50]);
|
|
66
|
-
*
|
|
67
|
-
* // Pop removes from the end
|
|
68
|
-
* const last = list.pop();
|
|
69
|
-
* console.log(last); // 50;
|
|
70
|
-
*
|
|
71
|
-
* // Shift removes from the beginning
|
|
72
|
-
* const first = list.shift();
|
|
73
|
-
* console.log(first); // 10;
|
|
74
|
-
*
|
|
75
|
-
* // Verify remaining elements
|
|
76
|
-
* console.log([...list]); // [20, 30, 40];
|
|
77
|
-
* console.log(list.length); // 3;
|
|
78
|
-
* @example
|
|
79
|
-
* // SinglyLinkedList unshift and forward traversal
|
|
80
|
-
* const list = new SinglyLinkedList<number>([20, 30, 40]);
|
|
81
|
-
*
|
|
82
|
-
* // Unshift adds to the beginning
|
|
83
|
-
* list.unshift(10);
|
|
84
|
-
* console.log([...list]); // [10, 20, 30, 40];
|
|
85
|
-
*
|
|
86
|
-
* // Access elements (forward traversal only for singly linked)
|
|
87
|
-
* const second = list.at(1);
|
|
88
|
-
* console.log(second); // 20;
|
|
89
|
-
*
|
|
90
|
-
* // SinglyLinkedList allows forward iteration only
|
|
91
|
-
* const elements: number[] = [];
|
|
92
|
-
* for (const item of list) {
|
|
93
|
-
* elements.push(item);
|
|
94
|
-
* }
|
|
95
|
-
* console.log(elements); // [10, 20, 30, 40];
|
|
96
|
-
*
|
|
97
|
-
* console.log(list.length); // 4;
|
|
98
|
-
* @example
|
|
99
|
-
* // SinglyLinkedList filter and map operations
|
|
100
|
-
* const list = new SinglyLinkedList<number>([1, 2, 3, 4, 5]);
|
|
101
|
-
*
|
|
102
|
-
* // Filter even numbers
|
|
103
|
-
* const filtered = list.filter(value => value % 2 === 0);
|
|
104
|
-
* console.log(filtered.length); // 2;
|
|
105
|
-
*
|
|
106
|
-
* // Map to double values
|
|
107
|
-
* const doubled = list.map(value => value * 2);
|
|
108
|
-
* console.log(doubled.length); // 5;
|
|
109
|
-
*
|
|
110
|
-
* // Use reduce to sum
|
|
111
|
-
* const sum = list.reduce((acc, value) => acc + value, 0);
|
|
112
|
-
* console.log(sum); // 15;
|
|
113
|
-
* @example
|
|
114
49
|
* // SinglyLinkedList for sequentially processed data stream
|
|
115
50
|
* interface LogEntry {
|
|
116
51
|
* timestamp: number;
|
|
@@ -227,6 +162,17 @@ export declare class SinglyLinkedListNode<E = any> extends LinkedListNode<E> {
|
|
|
227
162
|
* editor.moveCursor(1);
|
|
228
163
|
* editor.insert('a');
|
|
229
164
|
* console.log(editor.getText()); // 'Haello';
|
|
165
|
+
* @example
|
|
166
|
+
* // Find first matching element
|
|
167
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3, 4, 5]);
|
|
168
|
+
* console.log(list.find(n => n > 3)); // 4;
|
|
169
|
+
* console.log(list.find(n => n > 10)); // undefined;
|
|
170
|
+
* @example
|
|
171
|
+
* // Iterate over elements
|
|
172
|
+
* const list = new SinglyLinkedList<number>([10, 20, 30]);
|
|
173
|
+
* const result: number[] = [];
|
|
174
|
+
* list.forEach(n => result.push(n));
|
|
175
|
+
* console.log(result); // [10, 20, 30];
|
|
230
176
|
*/
|
|
231
177
|
export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase<E, R, SinglyLinkedListNode<E>> {
|
|
232
178
|
protected _equals: (a: E, b: E) => boolean;
|
|
@@ -288,18 +234,146 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
288
234
|
* @remarks Time O(1), Space O(1)
|
|
289
235
|
* @param elementOrNode - Element or node to append.
|
|
290
236
|
* @returns True when appended.
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
* @example
|
|
269
|
+
* // basic SinglyLinkedList creation and push operation
|
|
270
|
+
* // Create a simple SinglyLinkedList with initial values
|
|
271
|
+
* const list = new SinglyLinkedList([1, 2, 3, 4, 5]);
|
|
272
|
+
*
|
|
273
|
+
* // Verify the list maintains insertion order
|
|
274
|
+
* console.log([...list]); // [1, 2, 3, 4, 5];
|
|
275
|
+
*
|
|
276
|
+
* // Check length
|
|
277
|
+
* console.log(list.length); // 5;
|
|
278
|
+
*
|
|
279
|
+
* // Push a new element to the end
|
|
280
|
+
* list.push(6);
|
|
281
|
+
* console.log(list.length); // 6;
|
|
282
|
+
* console.log([...list]); // [1, 2, 3, 4, 5, 6];
|
|
291
283
|
*/
|
|
292
284
|
push(elementOrNode: E | SinglyLinkedListNode<E>): boolean;
|
|
293
285
|
/**
|
|
294
286
|
* Remove and return the tail element.
|
|
295
287
|
* @remarks Time O(N), Space O(1)
|
|
296
288
|
* @returns Removed element or undefined.
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
* @example
|
|
321
|
+
* // SinglyLinkedList pop and shift operations
|
|
322
|
+
* const list = new SinglyLinkedList<number>([10, 20, 30, 40, 50]);
|
|
323
|
+
*
|
|
324
|
+
* // Pop removes from the end
|
|
325
|
+
* const last = list.pop();
|
|
326
|
+
* console.log(last); // 50;
|
|
327
|
+
*
|
|
328
|
+
* // Shift removes from the beginning
|
|
329
|
+
* const first = list.shift();
|
|
330
|
+
* console.log(first); // 10;
|
|
331
|
+
*
|
|
332
|
+
* // Verify remaining elements
|
|
333
|
+
* console.log([...list]); // [20, 30, 40];
|
|
334
|
+
* console.log(list.length); // 3;
|
|
297
335
|
*/
|
|
298
336
|
pop(): E | undefined;
|
|
299
337
|
/**
|
|
300
338
|
* Remove and return the head element.
|
|
301
339
|
* @remarks Time O(1), Space O(1)
|
|
302
340
|
* @returns Removed element or undefined.
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
* @example
|
|
373
|
+
* // Remove from the front
|
|
374
|
+
* const list = new SinglyLinkedList<number>([10, 20, 30]);
|
|
375
|
+
* console.log(list.shift()); // 10;
|
|
376
|
+
* console.log(list.length); // 2;
|
|
303
377
|
*/
|
|
304
378
|
shift(): E | undefined;
|
|
305
379
|
/**
|
|
@@ -307,6 +381,57 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
307
381
|
* @remarks Time O(1), Space O(1)
|
|
308
382
|
* @param elementOrNode - Element or node to prepend.
|
|
309
383
|
* @returns True when prepended.
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
* @example
|
|
416
|
+
* // SinglyLinkedList unshift and forward traversal
|
|
417
|
+
* const list = new SinglyLinkedList<number>([20, 30, 40]);
|
|
418
|
+
*
|
|
419
|
+
* // Unshift adds to the beginning
|
|
420
|
+
* list.unshift(10);
|
|
421
|
+
* console.log([...list]); // [10, 20, 30, 40];
|
|
422
|
+
*
|
|
423
|
+
* // Access elements (forward traversal only for singly linked)
|
|
424
|
+
* const second = list.at(1);
|
|
425
|
+
* console.log(second); // 20;
|
|
426
|
+
*
|
|
427
|
+
* // SinglyLinkedList allows forward iteration only
|
|
428
|
+
* const elements: number[] = [];
|
|
429
|
+
* for (const item of list) {
|
|
430
|
+
* elements.push(item);
|
|
431
|
+
* }
|
|
432
|
+
* console.log(elements); // [10, 20, 30, 40];
|
|
433
|
+
*
|
|
434
|
+
* console.log(list.length); // 4;
|
|
310
435
|
*/
|
|
311
436
|
unshift(elementOrNode: E | SinglyLinkedListNode<E>): boolean;
|
|
312
437
|
/**
|
|
@@ -335,6 +460,43 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
335
460
|
* @remarks Time O(N), Space O(1)
|
|
336
461
|
* @param index - Zero-based index.
|
|
337
462
|
* @returns Element or undefined.
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
* @example
|
|
495
|
+
* // Access element by index
|
|
496
|
+
* const list = new SinglyLinkedList<string>(['a', 'b', 'c', 'd']);
|
|
497
|
+
* console.log(list.at(0)); // 'a';
|
|
498
|
+
* console.log(list.at(2)); // 'c';
|
|
499
|
+
* console.log(list.at(3)); // 'd';
|
|
338
500
|
*/
|
|
339
501
|
at(index: number): E | undefined;
|
|
340
502
|
/**
|
|
@@ -349,6 +511,38 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
349
511
|
* @remarks Time O(N), Space O(1)
|
|
350
512
|
* @param index - Zero-based index.
|
|
351
513
|
* @returns Node or undefined.
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
* @example
|
|
543
|
+
* // Get node at index
|
|
544
|
+
* const list = new SinglyLinkedList<string>(['a', 'b', 'c']);
|
|
545
|
+
* console.log(list.getNodeAt(1)?.value); // 'b';
|
|
352
546
|
*/
|
|
353
547
|
getNodeAt(index: number): SinglyLinkedListNode<E> | undefined;
|
|
354
548
|
/**
|
|
@@ -356,6 +550,39 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
356
550
|
* @remarks Time O(N), Space O(1)
|
|
357
551
|
* @param index - Zero-based index.
|
|
358
552
|
* @returns Removed element or undefined.
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
* @example
|
|
582
|
+
* // Remove by index
|
|
583
|
+
* const list = new SinglyLinkedList<string>(['a', 'b', 'c']);
|
|
584
|
+
* list.deleteAt(1);
|
|
585
|
+
* console.log(list.toArray()); // ['a', 'c'];
|
|
359
586
|
*/
|
|
360
587
|
deleteAt(index: number): E | undefined;
|
|
361
588
|
/**
|
|
@@ -363,6 +590,39 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
363
590
|
* @remarks Time O(N), Space O(1)
|
|
364
591
|
* @param [elementOrNode] - Element or node to remove; if omitted/undefined, nothing happens.
|
|
365
592
|
* @returns True if removed.
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
* @example
|
|
622
|
+
* // Remove first occurrence
|
|
623
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3, 2]);
|
|
624
|
+
* list.delete(2);
|
|
625
|
+
* console.log(list.toArray()); // [1, 3, 2];
|
|
366
626
|
*/
|
|
367
627
|
delete(elementOrNode: E | SinglyLinkedListNode<E> | undefined): boolean;
|
|
368
628
|
/**
|
|
@@ -371,6 +631,39 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
371
631
|
* @param index - Zero-based index.
|
|
372
632
|
* @param newElementOrNode - Element or node to insert.
|
|
373
633
|
* @returns True if inserted.
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
* @example
|
|
663
|
+
* // Insert at index
|
|
664
|
+
* const list = new SinglyLinkedList<number>([1, 3]);
|
|
665
|
+
* list.addAt(1, 2);
|
|
666
|
+
* console.log(list.toArray()); // [1, 2, 3];
|
|
374
667
|
*/
|
|
375
668
|
addAt(index: number, newElementOrNode: E | SinglyLinkedListNode<E>): boolean;
|
|
376
669
|
/**
|
|
@@ -385,18 +678,120 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
385
678
|
* Check whether the list is empty.
|
|
386
679
|
* @remarks Time O(1), Space O(1)
|
|
387
680
|
* @returns True if length is 0.
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
* @example
|
|
711
|
+
* // Check empty
|
|
712
|
+
* console.log(new SinglyLinkedList().isEmpty()); // true;
|
|
388
713
|
*/
|
|
389
714
|
isEmpty(): boolean;
|
|
390
715
|
/**
|
|
391
716
|
* Remove all nodes and reset length.
|
|
392
717
|
* @remarks Time O(N), Space O(1)
|
|
393
718
|
* @returns void
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
* @example
|
|
749
|
+
* // Remove all
|
|
750
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3]);
|
|
751
|
+
* list.clear();
|
|
752
|
+
* console.log(list.isEmpty()); // true;
|
|
394
753
|
*/
|
|
395
754
|
clear(): void;
|
|
396
755
|
/**
|
|
397
756
|
* Reverse the list in place.
|
|
398
757
|
* @remarks Time O(N), Space O(1)
|
|
399
758
|
* @returns This list.
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
|
|
783
|
+
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
* @example
|
|
791
|
+
* // Reverse the list in-place
|
|
792
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3, 4]);
|
|
793
|
+
* list.reverse();
|
|
794
|
+
* console.log([...list]); // [4, 3, 2, 1];
|
|
400
795
|
*/
|
|
401
796
|
reverse(): this;
|
|
402
797
|
/**
|
|
@@ -456,6 +851,42 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
456
851
|
* Deep clone this list (values are copied by reference).
|
|
457
852
|
* @remarks Time O(N), Space O(N)
|
|
458
853
|
* @returns A new list with the same element sequence.
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
* @example
|
|
884
|
+
* // Deep copy
|
|
885
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3]);
|
|
886
|
+
* const copy = list.clone();
|
|
887
|
+
* copy.pop();
|
|
888
|
+
* console.log(list.length); // 3;
|
|
889
|
+
* console.log(copy.length); // 2;
|
|
459
890
|
*/
|
|
460
891
|
clone(): this;
|
|
461
892
|
/**
|
|
@@ -464,8 +895,54 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
464
895
|
* @param callback - Predicate (value, index, list) → boolean to keep value.
|
|
465
896
|
* @param [thisArg] - Value for `this` inside the callback.
|
|
466
897
|
* @returns A new list with kept values.
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
|
|
929
|
+
* @example
|
|
930
|
+
* // SinglyLinkedList filter and map operations
|
|
931
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3, 4, 5]);
|
|
932
|
+
*
|
|
933
|
+
* // Filter even numbers
|
|
934
|
+
* const filtered = list.filter(value => value % 2 === 0);
|
|
935
|
+
* console.log(filtered.length); // 2;
|
|
936
|
+
*
|
|
937
|
+
* // Map to double values
|
|
938
|
+
* const doubled = list.map(value => value * 2);
|
|
939
|
+
* console.log(doubled.length); // 5;
|
|
940
|
+
*
|
|
941
|
+
* // Use reduce to sum
|
|
942
|
+
* const sum = list.reduce((acc, value) => acc + value, 0);
|
|
943
|
+
* console.log(sum); // 15;
|
|
467
944
|
*/
|
|
468
|
-
filter(callback: ElementCallback<E, R, boolean>, thisArg?:
|
|
945
|
+
filter(callback: ElementCallback<E, R, boolean>, thisArg?: unknown): this;
|
|
469
946
|
/**
|
|
470
947
|
* Map values into a new list of the same class.
|
|
471
948
|
* @remarks Time O(N), Space O(N)
|
|
@@ -473,7 +950,7 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
473
950
|
* @param [thisArg] - Value for `this` inside the callback.
|
|
474
951
|
* @returns A new list with mapped values.
|
|
475
952
|
*/
|
|
476
|
-
mapSame(callback: ElementCallback<E, R, E>, thisArg?:
|
|
953
|
+
mapSame(callback: ElementCallback<E, R, E>, thisArg?: unknown): this;
|
|
477
954
|
/**
|
|
478
955
|
* Map values into a new list (possibly different element type).
|
|
479
956
|
* @remarks Time O(N), Space O(N)
|
|
@@ -483,8 +960,44 @@ export declare class SinglyLinkedList<E = any, R = any> extends LinearLinkedBase
|
|
|
483
960
|
* @param [options] - Options for the output list (e.g., maxLen, toElementFn).
|
|
484
961
|
* @param [thisArg] - Value for `this` inside the callback.
|
|
485
962
|
* @returns A new SinglyLinkedList with mapped values.
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
* @example
|
|
995
|
+
* // Transform elements
|
|
996
|
+
* const list = new SinglyLinkedList<number>([1, 2, 3]);
|
|
997
|
+
* const doubled = list.map(n => n * 2);
|
|
998
|
+
* console.log([...doubled]); // [2, 4, 6];
|
|
486
999
|
*/
|
|
487
|
-
map<EM, RM = any>(callback: ElementCallback<E, R, EM>, options?: SinglyLinkedListOptions<EM, RM>, thisArg?:
|
|
1000
|
+
map<EM, RM = any>(callback: ElementCallback<E, R, EM>, options?: SinglyLinkedListOptions<EM, RM>, thisArg?: unknown): SinglyLinkedList<EM, RM>;
|
|
488
1001
|
/**
|
|
489
1002
|
* (Protected) Create a node from a value.
|
|
490
1003
|
* @remarks Time O(1), Space O(1)
|