@raikuxq/alg-ds 1.1.6 → 1.2.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 (184) hide show
  1. package/README.md +71 -88
  2. package/lib/app/algorithms/binary-search.d.ts +5 -0
  3. package/lib/app/algorithms/binary-search.js +27 -0
  4. package/lib/app/algorithms/factorial.d.ts +9 -0
  5. package/lib/app/algorithms/factorial.js +17 -0
  6. package/lib/app/algorithms/fibonacci.d.ts +9 -0
  7. package/lib/app/algorithms/fibonacci.js +17 -0
  8. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +35 -0
  9. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
  10. package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.d.ts +28 -0
  11. package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.js +70 -0
  12. package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.d.ts +28 -0
  13. package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.js +70 -0
  14. package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  15. package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.js +97 -0
  16. package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.d.ts +6 -0
  17. package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.js +13 -0
  18. package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.d.ts +6 -0
  19. package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.js +13 -0
  20. package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.d.ts +6 -0
  21. package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.js +13 -0
  22. package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  23. package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.js +28 -0
  24. package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
  25. package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.js +48 -0
  26. package/lib/app/algorithms/graph/searching/hasPath.d.ts +9 -0
  27. package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
  28. package/lib/app/algorithms/graph/searching/shortestPath.d.ts +9 -0
  29. package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
  30. package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.d.ts +2 -0
  31. package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
  32. package/lib/app/algorithms/memoize.d.ts +5 -0
  33. package/lib/app/algorithms/memoize.js +22 -0
  34. package/lib/app/algorithms/sorts/bubble-sort.d.ts +9 -0
  35. package/lib/app/algorithms/sorts/bubble-sort.js +23 -0
  36. package/lib/app/algorithms/sorts/insertion-sort.d.ts +9 -0
  37. package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
  38. package/lib/app/algorithms/sorts/merge-sort.d.ts +9 -0
  39. package/lib/app/algorithms/sorts/merge-sort.js +61 -0
  40. package/lib/app/algorithms/sorts/quick-sort.d.ts +9 -0
  41. package/lib/app/algorithms/sorts/quick-sort.js +45 -0
  42. package/lib/app/algorithms/sorts/select-sort.d.ts +9 -0
  43. package/lib/app/algorithms/sorts/select-sort.js +20 -0
  44. package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
  45. package/lib/app/algorithms/transpose-matrix.js +18 -0
  46. package/lib/app/constants.d.ts +2 -0
  47. package/lib/app/constants.js +6 -0
  48. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  49. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  50. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  51. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  52. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  53. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  54. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  55. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
  56. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  57. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  58. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  59. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
  60. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
  61. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
  62. package/lib/app/data-structures/Graph/AbstractGraph.d.ts +84 -0
  63. package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
  64. package/lib/app/data-structures/Graph/DirectedGraph.d.ts +24 -0
  65. package/lib/app/data-structures/Graph/DirectedGraph.js +86 -0
  66. package/lib/app/data-structures/Graph/GraphEdge.d.ts +16 -0
  67. package/lib/app/data-structures/Graph/GraphEdge.js +43 -0
  68. package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  69. package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
  70. package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
  71. package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
  72. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
  73. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
  74. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.d.ts +4 -0
  75. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
  76. package/lib/app/data-structures/HashTable/HashTable.d.ts +73 -0
  77. package/lib/app/data-structures/HashTable/HashTable.js +171 -0
  78. package/lib/app/data-structures/HashTable/HashTableNode.d.ts +11 -0
  79. package/lib/app/data-structures/HashTable/HashTableNode.js +39 -0
  80. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  81. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
  82. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  83. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  84. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  85. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
  86. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  87. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  88. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  89. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
  90. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
  91. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  92. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
  93. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
  94. package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
  95. package/lib/app/data-structures/LoopedArray/LoopedArray.js +169 -0
  96. package/lib/app/data-structures/Queue/Queue.d.ts +50 -0
  97. package/lib/app/data-structures/Queue/Queue.js +85 -0
  98. package/lib/app/data-structures/Stack/Stack.d.ts +50 -0
  99. package/lib/app/data-structures/Stack/Stack.js +85 -0
  100. package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
  101. package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
  102. package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
  103. package/lib/app/exceptions/CollectionIsFullException.js +28 -0
  104. package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
  105. package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
  106. package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
  107. package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
  108. package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
  109. package/lib/app/exceptions/IsNotFoundException.js +28 -0
  110. package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
  111. package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
  112. package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
  113. package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
  114. package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
  115. package/lib/app/exceptions/base/IllegalStateException.js +27 -0
  116. package/lib/app/types/EnumBinarySearchTreeType.d.ts +4 -0
  117. package/lib/app/types/EnumBinarySearchTreeType.js +9 -0
  118. package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
  119. package/lib/app/types/EnumGraphTraversalType.js +10 -0
  120. package/lib/app/types/EnumGraphType.d.ts +4 -0
  121. package/lib/app/types/EnumGraphType.js +9 -0
  122. package/lib/app/types/EnumLinkedListType.d.ts +4 -0
  123. package/lib/app/types/EnumLinkedListType.js +9 -0
  124. package/lib/app/types/EnumRandomGenerationFormat.d.ts +4 -0
  125. package/lib/app/types/EnumRandomGenerationFormat.js +9 -0
  126. package/lib/app/types/EnumSortType.d.ts +7 -0
  127. package/lib/app/types/EnumSortType.js +12 -0
  128. package/lib/app/types/EnumTreeTraversalType.d.ts +5 -0
  129. package/lib/app/types/EnumTreeTraversalType.js +10 -0
  130. package/lib/app/types/FnCompareTwo.d.ts +1 -0
  131. package/lib/app/types/FnCompareTwo.js +3 -0
  132. package/lib/app/types/FnToMemoize.d.ts +1 -0
  133. package/lib/app/types/FnToMemoize.js +3 -0
  134. package/lib/app/types/IArrayFacade.d.ts +4 -0
  135. package/lib/app/types/IArrayFacade.js +3 -0
  136. package/lib/app/types/IBiDirectIterable.d.ts +5 -0
  137. package/lib/app/types/IBiDirectIterable.js +3 -0
  138. package/lib/app/types/IBiDirectIterator.d.ts +11 -0
  139. package/lib/app/types/IBiDirectIterator.js +3 -0
  140. package/lib/app/types/IBinaryTree.d.ts +12 -0
  141. package/lib/app/types/IBinaryTree.js +3 -0
  142. package/lib/app/types/IConvertableToArray.d.ts +4 -0
  143. package/lib/app/types/IConvertableToArray.js +3 -0
  144. package/lib/app/types/IGraph.d.ts +14 -0
  145. package/lib/app/types/IGraph.js +3 -0
  146. package/lib/app/types/IGraphIterationStrategy.d.ts +5 -0
  147. package/lib/app/types/IGraphIterationStrategy.js +3 -0
  148. package/lib/app/types/IGraphIterator.d.ts +11 -0
  149. package/lib/app/types/IGraphIterator.js +3 -0
  150. package/lib/app/types/IIterable.d.ts +4 -0
  151. package/lib/app/types/IIterable.js +3 -0
  152. package/lib/app/types/IIterator.d.ts +14 -0
  153. package/lib/app/types/IIterator.js +3 -0
  154. package/lib/app/types/IKeyValueStorage.d.ts +8 -0
  155. package/lib/app/types/IKeyValueStorage.js +3 -0
  156. package/lib/app/types/ILinearStorage.d.ts +11 -0
  157. package/lib/app/types/ILinearStorage.js +3 -0
  158. package/lib/app/types/ILinearStorageRA.d.ts +13 -0
  159. package/lib/app/types/ILinearStorageRA.js +3 -0
  160. package/lib/app/types/ILinkedList.d.ts +4 -0
  161. package/lib/app/types/ILinkedList.js +3 -0
  162. package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
  163. package/lib/app/types/TypeArrayMatrix.js +3 -0
  164. package/lib/app/utils.d.ts +37 -0
  165. package/lib/app/utils.js +114 -0
  166. package/lib/exports/algorithms.d.ts +16 -0
  167. package/lib/exports/algorithms.js +36 -0
  168. package/lib/exports/constants.d.ts +2 -0
  169. package/lib/exports/constants.js +7 -0
  170. package/lib/exports/data-structures.d.ts +11 -0
  171. package/lib/exports/data-structures.js +24 -0
  172. package/lib/exports/helpers.d.ts +6 -0
  173. package/lib/exports/helpers.js +14 -0
  174. package/lib/exports/sorts.d.ts +6 -0
  175. package/lib/exports/sorts.js +14 -0
  176. package/lib/exports/types.d.ts +16 -0
  177. package/lib/exports/types.js +34 -0
  178. package/lib/exports/utils.d.ts +3 -0
  179. package/lib/exports/utils.js +14 -0
  180. package/lib/exports.d.ts +53 -0
  181. package/lib/exports.js +105 -0
  182. package/lib/index.d.ts +3 -0
  183. package/lib/index.js +5 -0
  184. package/package.json +11 -6
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ValueOutOfRangeException_1 = require("../../../exceptions/ValueOutOfRangeException");
4
+ var CollectionIsFullException_1 = require("../../../exceptions/CollectionIsFullException");
5
+ var CollectionIsEmptyException_1 = require("../../../exceptions/CollectionIsEmptyException");
6
+ var IndexOutOfBoundsException_1 = require("../../../exceptions/IndexOutOfBoundsException");
7
+ var AbstractLinkedList = /** @class */ (function () {
8
+ /**
9
+ * Create empty instance
10
+ */
11
+ function AbstractLinkedList(capacity) {
12
+ this._capacity = AbstractLinkedList.calculateCapacity(capacity);
13
+ this._head = null;
14
+ this._tail = null;
15
+ this._length = 0;
16
+ }
17
+ /**
18
+ * Will calculate real capacity value
19
+ * @throws when capacity <= 0
20
+ */
21
+ AbstractLinkedList.calculateCapacity = function (capacity) {
22
+ if (capacity === undefined) {
23
+ return Number.MAX_VALUE;
24
+ }
25
+ if (capacity <= 0) {
26
+ throw new ValueOutOfRangeException_1.default("Capacity must be larger than 0");
27
+ }
28
+ return capacity;
29
+ };
30
+ /**
31
+ * Will insert node between nodeLeft and nodeRight
32
+ * @throws when list is full
33
+ */
34
+ AbstractLinkedList.prototype.insertNodeBetweenTwoNodes = function (targetNode, leftNode, rightNode) {
35
+ if (this.isFull()) {
36
+ throw new CollectionIsFullException_1.default("List is full, no more space available");
37
+ }
38
+ if (this._head === null) {
39
+ this._head = targetNode;
40
+ }
41
+ if (this._tail === null) {
42
+ this._tail = targetNode;
43
+ }
44
+ if (!leftNode) {
45
+ leftNode = this._tail;
46
+ }
47
+ if (!rightNode) {
48
+ rightNode = this._head;
49
+ }
50
+ this.insertNodeBetweenTwoNodesImpl(targetNode, leftNode, rightNode);
51
+ this._length++;
52
+ };
53
+ /**
54
+ * Will remove the node from its neighbors nodes links
55
+ * @throws when node does not exist
56
+ */
57
+ AbstractLinkedList.prototype.deleteNode = function (node) {
58
+ this.deleteNodeImpl(node);
59
+ this._length--;
60
+ if (this.isEmpty()) {
61
+ this.clear();
62
+ }
63
+ return node;
64
+ };
65
+ /**
66
+ * Will find node by its index
67
+ * @throws when node was not found
68
+ */
69
+ AbstractLinkedList.prototype.getNodeByIndex = function (index) {
70
+ var isIndexNotInRange = index < 0 || index > this._length;
71
+ if (this.isEmpty()) {
72
+ throw new CollectionIsEmptyException_1.default("List is empty");
73
+ }
74
+ if (isIndexNotInRange) {
75
+ throw new IndexOutOfBoundsException_1.default("Index exceed list length");
76
+ }
77
+ var currentNode = this._tail;
78
+ var counter = 0;
79
+ while (currentNode && counter < index) {
80
+ currentNode = currentNode.next;
81
+ counter++;
82
+ }
83
+ return currentNode;
84
+ };
85
+ /**
86
+ * Push into start
87
+ */
88
+ AbstractLinkedList.prototype.unshift = function (value) {
89
+ var node = this.createNode(value);
90
+ this.insertNodeBetweenTwoNodes(node, this._head, this._tail);
91
+ this._tail = node;
92
+ };
93
+ /**
94
+ * Push into end
95
+ */
96
+ AbstractLinkedList.prototype.push = function (value) {
97
+ var node = this.createNode(value);
98
+ this.insertNodeBetweenTwoNodes(node, this._head, this._tail);
99
+ this._head = node;
100
+ };
101
+ /**
102
+ * Push from index
103
+ */
104
+ AbstractLinkedList.prototype.pushFromIndex = function (value, fromIndex) {
105
+ var isIndexNotInRange = fromIndex < 0 || fromIndex > this._length;
106
+ var shouldPushAsFirst = this.isEmpty() && fromIndex === 0;
107
+ if (isIndexNotInRange) {
108
+ throw new IndexOutOfBoundsException_1.default("index must be in range between 0 and list length");
109
+ }
110
+ if (shouldPushAsFirst) {
111
+ this.push(value);
112
+ }
113
+ else {
114
+ var node = this.createNode(value);
115
+ var nodeLeft = this.getNodeByIndex(fromIndex - 1);
116
+ var nodeRight = this.getNodeByIndex(fromIndex);
117
+ this.insertNodeBetweenTwoNodes(node, nodeLeft, nodeRight);
118
+ }
119
+ };
120
+ /**
121
+ * Delete node from list's end
122
+ */
123
+ AbstractLinkedList.prototype.pop = function () {
124
+ if (this.isEmpty() || this._head === null) {
125
+ throw new CollectionIsEmptyException_1.default("cannot delete because list is empty");
126
+ }
127
+ var deletedNode = this.deleteNode(this._head);
128
+ this.popImpl();
129
+ return deletedNode.data;
130
+ };
131
+ /**
132
+ * Delete node from list's start and get its data
133
+ */
134
+ AbstractLinkedList.prototype.shift = function () {
135
+ if (this.isEmpty() || this._tail === null) {
136
+ throw new CollectionIsEmptyException_1.default("cannot delete because list is empty");
137
+ }
138
+ var deletedNode = this.deleteNode(this._tail);
139
+ this.shiftImpl();
140
+ return deletedNode.data;
141
+ };
142
+ /**
143
+ * Delete node from list by index from start
144
+ */
145
+ AbstractLinkedList.prototype.deleteFromIndex = function (fromIndex) {
146
+ var nodeToDelete = this.getNodeByIndex(fromIndex);
147
+ var deletedNode = this.deleteNode(nodeToDelete);
148
+ return deletedNode.data;
149
+ };
150
+ /**
151
+ * List length
152
+ */
153
+ AbstractLinkedList.prototype.length = function () {
154
+ return this._length;
155
+ };
156
+ /**
157
+ * Is list empty
158
+ */
159
+ AbstractLinkedList.prototype.isEmpty = function () {
160
+ return this._length === 0;
161
+ };
162
+ /**
163
+ * Is list full
164
+ */
165
+ AbstractLinkedList.prototype.isFull = function () {
166
+ return this._length >= this._capacity;
167
+ };
168
+ /**
169
+ * Check if element exists in list
170
+ */
171
+ AbstractLinkedList.prototype.has = function (item) {
172
+ return this.getAsArray().includes(item);
173
+ };
174
+ /**
175
+ * Get head element data
176
+ * @throws when head does not exist
177
+ */
178
+ AbstractLinkedList.prototype.peek = function () {
179
+ if (this.isEmpty() || !this._head) {
180
+ throw new CollectionIsEmptyException_1.default("head does not exist");
181
+ }
182
+ return this._head.data;
183
+ };
184
+ /**
185
+ * Get tail element data
186
+ * @throws when tail does not exists
187
+ */
188
+ AbstractLinkedList.prototype.peekFromStart = function () {
189
+ if (this.isEmpty() || !this._tail) {
190
+ throw new CollectionIsEmptyException_1.default("tail does not exist");
191
+ }
192
+ return this._tail.data;
193
+ };
194
+ /**
195
+ * Get list element by index from start
196
+ * @throws when element does not exist
197
+ */
198
+ AbstractLinkedList.prototype.peekByIndex = function (index) {
199
+ var node = this.getNodeByIndex(index);
200
+ return node.data;
201
+ };
202
+ /**
203
+ * Remove all elements from list
204
+ */
205
+ AbstractLinkedList.prototype.clear = function () {
206
+ this._head = null;
207
+ this._tail = null;
208
+ this._length = 0;
209
+ };
210
+ /**
211
+ * Get elements as an array
212
+ */
213
+ AbstractLinkedList.prototype.getAsArray = function () {
214
+ var array = [];
215
+ var currentNode = this._tail;
216
+ var counter = 0;
217
+ while (currentNode && counter < this._length) {
218
+ if (currentNode)
219
+ array.push(currentNode.data);
220
+ currentNode = currentNode.next;
221
+ counter++;
222
+ }
223
+ return array;
224
+ };
225
+ /**
226
+ * Add elements to list from array
227
+ * @throws when list is full
228
+ * */
229
+ AbstractLinkedList.prototype.pushFromArray = function (elements) {
230
+ var _this = this;
231
+ elements.forEach(function (element) {
232
+ if (_this.isFull()) {
233
+ throw new CollectionIsFullException_1.default("List is full, no more space available");
234
+ }
235
+ _this.push(element);
236
+ });
237
+ };
238
+ return AbstractLinkedList;
239
+ }());
240
+ exports.default = AbstractLinkedList;
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RMaW5rZWRMaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9BYnN0cmFjdExpbmtlZExpc3QvQWJzdHJhY3RMaW5rZWRMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEseUZBQW9GO0FBQ3BGLDJGQUFzRjtBQUN0Riw2RkFBd0Y7QUFDeEYsMkZBQXNGO0FBRXRGO0lBTUU7O09BRUc7SUFDSCw0QkFBc0IsUUFBaUI7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ1ksb0NBQWlCLEdBQWhDLFVBQWlDLFFBQWlCO1FBQ2hELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDekI7UUFDRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7WUFDakIsTUFBTSxJQUFJLGtDQUF3QixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDdEU7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0RBQXlCLEdBQWpDLFVBQ0UsVUFBaUMsRUFDakMsUUFBc0MsRUFDdEMsU0FBdUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsTUFBTSxJQUFJLG1DQUF5QixDQUNqQyx1Q0FBdUMsQ0FDeEMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxHQUFH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
@@ -0,0 +1,20 @@
1
+ export default abstract class AbstractLinkedNode<T> {
2
+ protected _next: AbstractLinkedNode<T> | null;
3
+ protected readonly _data: T;
4
+ /**
5
+ * Will create empty node
6
+ */
7
+ protected constructor(data: T, next?: AbstractLinkedNode<T> | null);
8
+ /**
9
+ * Get data of node
10
+ */
11
+ get data(): T;
12
+ /**
13
+ * Get next node link
14
+ */
15
+ get next(): AbstractLinkedNode<T> | null;
16
+ /**
17
+ * Set next node link
18
+ */
19
+ set next(value: AbstractLinkedNode<T> | null);
20
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var AbstractLinkedNode = /** @class */ (function () {
4
+ /**
5
+ * Will create empty node
6
+ */
7
+ function AbstractLinkedNode(data, next) {
8
+ if (next === void 0) { next = null; }
9
+ this._data = data;
10
+ this._next = next;
11
+ }
12
+ Object.defineProperty(AbstractLinkedNode.prototype, "data", {
13
+ /**
14
+ * Get data of node
15
+ */
16
+ get: function () {
17
+ return this._data;
18
+ },
19
+ enumerable: false,
20
+ configurable: true
21
+ });
22
+ Object.defineProperty(AbstractLinkedNode.prototype, "next", {
23
+ /**
24
+ * Get next node link
25
+ */
26
+ get: function () {
27
+ return this._next;
28
+ },
29
+ /**
30
+ * Set next node link
31
+ */
32
+ set: function (value) {
33
+ this._next = value;
34
+ },
35
+ enumerable: false,
36
+ configurable: true
37
+ });
38
+ return AbstractLinkedNode;
39
+ }());
40
+ exports.default = AbstractLinkedNode;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RMaW5rZWROb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9BYnN0cmFjdExpbmtlZExpc3QvQWJzdHJhY3RMaW5rZWROb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7SUFJRTs7T0FFRztJQUNILDRCQUFzQixJQUFPLEVBQUUsSUFBeUM7UUFBekMscUJBQUEsRUFBQSxXQUF5QztRQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBS0Qsc0JBQVcsb0NBQUk7UUFIZjs7V0FFRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7OztPQUFBO0lBS0Qsc0JBQVcsb0NBQUk7UUFIZjs7V0FFRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7UUFFRDs7V0FFRzthQUNILFVBQWdCLEtBQW1DO1lBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQVBBO0lBUUgseUJBQUM7QUFBRCxDQUFDLEFBaENELElBZ0NDIn0=
@@ -0,0 +1,48 @@
1
+ import IBiDirectIterator from "../../../types/IBiDirectIterator";
2
+ import IBiDirectIterable from "../../../types/IBiDirectIterable";
3
+ import AbstractLinkedList from "../AbstractLinkedList/AbstractLinkedList";
4
+ import DoubleLinkedNode from "./DoubleLinkedNode";
5
+ /**
6
+ * Linear data structure
7
+ * Each node has next and prev sibling
8
+ * Head and tail are linked to each other
9
+ */
10
+ export default class DoubleLinkedList<T> extends AbstractLinkedList<T> implements IBiDirectIterable<T> {
11
+ /**
12
+ * Override types
13
+ */
14
+ protected _head: DoubleLinkedNode<T> | null;
15
+ protected _tail: DoubleLinkedNode<T> | null;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ constructor(capacity?: number);
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ protected createNode(value: T): DoubleLinkedNode<T>;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ protected insertNodeBetweenTwoNodesImpl(targetNode: DoubleLinkedNode<T>, leftNode: DoubleLinkedNode<T>, rightNode: DoubleLinkedNode<T>): void;
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ protected deleteNodeImpl(node: DoubleLinkedNode<T>): void;
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ protected popImpl(): void;
36
+ /**
37
+ * @inheritDoc
38
+ */
39
+ protected shiftImpl(): void;
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ reverse(): void;
44
+ /**
45
+ * List iterator
46
+ */
47
+ iterator(fromIndex?: number): IBiDirectIterator<T>;
48
+ }
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractLinkedList_1 = require("../AbstractLinkedList/AbstractLinkedList");
17
+ var DoubleLinkedNode_1 = require("./DoubleLinkedNode");
18
+ var IsNotFoundException_1 = require("../../../exceptions/IsNotFoundException");
19
+ /**
20
+ * Linear data structure
21
+ * Each node has next and prev sibling
22
+ * Head and tail are linked to each other
23
+ */
24
+ var DoubleLinkedList = /** @class */ (function (_super) {
25
+ __extends(DoubleLinkedList, _super);
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ function DoubleLinkedList(capacity) {
30
+ var _this = _super.call(this, capacity) || this;
31
+ _this._head = null;
32
+ _this._tail = null;
33
+ return _this;
34
+ }
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ DoubleLinkedList.prototype.createNode = function (value) {
39
+ return new DoubleLinkedNode_1.default(value);
40
+ };
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ DoubleLinkedList.prototype.insertNodeBetweenTwoNodesImpl = function (targetNode, leftNode, rightNode) {
45
+ targetNode.next = rightNode;
46
+ targetNode.prev = leftNode;
47
+ if (targetNode.prev) {
48
+ targetNode.prev.next = targetNode;
49
+ }
50
+ if (targetNode.next) {
51
+ targetNode.next.prev = targetNode;
52
+ }
53
+ };
54
+ /**
55
+ * @inheritDoc
56
+ */
57
+ DoubleLinkedList.prototype.deleteNodeImpl = function (node) {
58
+ node.prev.next = node.next;
59
+ node.next.prev = node.prev;
60
+ node.next = null;
61
+ node.prev = null;
62
+ };
63
+ /**
64
+ * @inheritDoc
65
+ */
66
+ DoubleLinkedList.prototype.popImpl = function () {
67
+ var _a;
68
+ this._head = ((_a = this._tail) === null || _a === void 0 ? void 0 : _a.prev) || null;
69
+ };
70
+ /**
71
+ * @inheritDoc
72
+ */
73
+ DoubleLinkedList.prototype.shiftImpl = function () {
74
+ var _a;
75
+ this._tail = ((_a = this._head) === null || _a === void 0 ? void 0 : _a.next) || null;
76
+ };
77
+ /**
78
+ * @inheritDoc
79
+ */
80
+ DoubleLinkedList.prototype.reverse = function () {
81
+ var currentNode = this._tail;
82
+ var i = 0;
83
+ while (currentNode && i < this._length) {
84
+ var newPrev = currentNode.next;
85
+ var newNext = currentNode.prev;
86
+ currentNode.prev = newPrev;
87
+ currentNode.next = newNext;
88
+ i++;
89
+ currentNode = newNext;
90
+ }
91
+ if (currentNode) {
92
+ this._tail = currentNode.next;
93
+ this._head = currentNode;
94
+ }
95
+ };
96
+ /**
97
+ * List iterator
98
+ */
99
+ DoubleLinkedList.prototype.iterator = function (fromIndex) {
100
+ if (fromIndex === void 0) { fromIndex = 0; }
101
+ var head = this._head;
102
+ var tail = this._tail;
103
+ var activeNode = this.getNodeByIndex(fromIndex);
104
+ var iterator = {
105
+ /**
106
+ * @inheritDoc
107
+ */
108
+ current: function () {
109
+ return activeNode.data;
110
+ },
111
+ /**
112
+ * @inheritDoc
113
+ */
114
+ hasNext: function () {
115
+ return Boolean(activeNode.next) && activeNode !== head;
116
+ },
117
+ /**
118
+ * @inheritDoc
119
+ */
120
+ hasPrev: function () {
121
+ return Boolean(activeNode.prev) && activeNode !== tail;
122
+ },
123
+ /**
124
+ * @inheritDoc
125
+ * @throws when next element does not exist
126
+ */
127
+ next: function () {
128
+ if (!iterator.hasNext()) {
129
+ throw new IsNotFoundException_1.default("Next element does not exist");
130
+ }
131
+ activeNode = activeNode.next;
132
+ return activeNode.data;
133
+ },
134
+ /**
135
+ * @inheritDoc
136
+ * @throws when prev element does not exists
137
+ */
138
+ prev: function () {
139
+ if (!iterator.hasPrev()) {
140
+ throw new IsNotFoundException_1.default("Prev element does not exist");
141
+ }
142
+ activeNode = activeNode.prev;
143
+ return activeNode.data;
144
+ },
145
+ };
146
+ return iterator;
147
+ };
148
+ return DoubleLinkedList;
149
+ }(AbstractLinkedList_1.default));
150
+ exports.default = DoubleLinkedList;
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG91YmxlTGlua2VkTGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0xpbmtlZExpc3QvRG91YmxlTGlua2VkTGlzdC9Eb3VibGVMaW5rZWRMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUVBLCtFQUEwRTtBQUMxRSx1REFBa0Q7QUFDbEQsK0VBQTBFO0FBRTFFOzs7O0dBSUc7QUFDSDtJQUNVLG9DQUFxQjtJQVE3Qjs7T0FFRztJQUNILDBCQUFtQixRQUFpQjtRQUFwQyxZQUNFLGtCQUFNLFFBQVEsQ0FBQyxTQUdoQjtRQUZDLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxxQ0FBVSxHQUFwQixVQUFxQixLQUFRO1FBQzNCLE9BQU8sSUFBSSwwQkFBZ0IsQ0FBSSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3REFBNkIsR0FBdkMsVUFDRSxVQUErQixFQUMvQixRQUE2QixFQUM3QixTQUE4QjtRQUU5QixVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUM1QixVQUFVLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUUzQixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLHlDQUFjLEdBQXhCLFVBQXlCLElBQXlCO1FBQ2hELElBQUssQ0FBQyxJQUFLLENBQUMsSUFBSSxHQUFHLElBQUssQ0FB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
@@ -0,0 +1,25 @@
1
+ import AbstractLinkedNode from "../AbstractLinkedList/AbstractLinkedNode";
2
+ export default class DoubleLinkedNode<T> extends AbstractLinkedNode<T> {
3
+ protected _prev: DoubleLinkedNode<T> | null;
4
+ protected _next: DoubleLinkedNode<T> | null;
5
+ /**
6
+ * Will create empty node
7
+ */
8
+ constructor(data: T, next?: DoubleLinkedNode<T> | null, prev?: DoubleLinkedNode<T> | null);
9
+ /**
10
+ * Set previous node link
11
+ */
12
+ set prev(value: DoubleLinkedNode<T> | null);
13
+ /**
14
+ * Get previous node link
15
+ */
16
+ get prev(): DoubleLinkedNode<T> | null;
17
+ /**
18
+ * @inheritDoc
19
+ */
20
+ set next(value: DoubleLinkedNode<T> | null);
21
+ /**
22
+ * @inheritDoc
23
+ */
24
+ get next(): DoubleLinkedNode<T> | null;
25
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractLinkedNode_1 = require("../AbstractLinkedList/AbstractLinkedNode");
17
+ var DoubleLinkedNode = /** @class */ (function (_super) {
18
+ __extends(DoubleLinkedNode, _super);
19
+ /**
20
+ * Will create empty node
21
+ */
22
+ function DoubleLinkedNode(data, next, prev) {
23
+ if (next === void 0) { next = null; }
24
+ if (prev === void 0) { prev = null; }
25
+ var _this = _super.call(this, data) || this;
26
+ _this._prev = prev;
27
+ _this._next = next;
28
+ return _this;
29
+ }
30
+ Object.defineProperty(DoubleLinkedNode.prototype, "prev", {
31
+ /**
32
+ * Get previous node link
33
+ */
34
+ get: function () {
35
+ return this._prev;
36
+ },
37
+ /**
38
+ * Set previous node link
39
+ */
40
+ set: function (value) {
41
+ this._prev = value;
42
+ },
43
+ enumerable: false,
44
+ configurable: true
45
+ });
46
+ Object.defineProperty(DoubleLinkedNode.prototype, "next", {
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ get: function () {
51
+ return this._next;
52
+ },
53
+ /**
54
+ * @inheritDoc
55
+ */
56
+ set: function (value) {
57
+ this._next = value;
58
+ },
59
+ enumerable: false,
60
+ configurable: true
61
+ });
62
+ return DoubleLinkedNode;
63
+ }(AbstractLinkedNode_1.default));
64
+ exports.default = DoubleLinkedNode;
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG91YmxlTGlua2VkTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0xpbmtlZExpc3QvRG91YmxlTGlua2VkTGlzdC9Eb3VibGVMaW5rZWROb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtFQUEwRTtBQUUxRTtJQUFpRCxvQ0FBcUI7SUFJcEU7O09BRUc7SUFDSCwwQkFDRSxJQUFPLEVBQ1AsSUFBdUMsRUFDdkMsSUFBdUM7UUFEdkMscUJBQUEsRUFBQSxXQUF1QztRQUN2QyxxQkFBQSxFQUFBLFdBQXVDO1FBSHpDLFlBS0Usa0JBQU0sSUFBSSxDQUFDLFNBR1o7UUFGQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs7SUFDcEIsQ0FBQztJQUtELHNCQUFXLGtDQUFJO1FBSWY7O1dBRUc7YUFDSDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDO1FBWkQ7O1dBRUc7YUFDSCxVQUFnQixLQUFpQztZQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDOzs7T0FBQTtJQVlELHNCQUFXLGtDQUFJO1FBSWY7O1dBRUc7YUFDSDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDO1FBWkQ7O1dBRUc7YUFDSCxVQUFnQixLQUFpQztZQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDOzs7T0FBQTtJQVFILHVCQUFDO0FBQUQsQ0FBQyxBQTVDRCxDQUFpRCw0QkFBa0IsR0E0Q2xFIn0=
@@ -0,0 +1,52 @@
1
+ import IIterator from "../../../types/IIterator";
2
+ import IIterable from "../../../types/IIterable";
3
+ import AbstractLinkedList from "../AbstractLinkedList/AbstractLinkedList";
4
+ import SingleLinkedNode from "./SingleLinkedNode";
5
+ /**
6
+ * Linear data structure
7
+ * Each node has next
8
+ * Head's next node is tail
9
+ */
10
+ export default class SingleLinkedList<T> extends AbstractLinkedList<T> implements IIterable<T> {
11
+ /**
12
+ * Override types
13
+ */
14
+ protected _head: SingleLinkedNode<T> | null;
15
+ protected _tail: SingleLinkedNode<T> | null;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ constructor(capacity?: number);
20
+ /**
21
+ * Find previous sibling of given node
22
+ */
23
+ private getPrevNode;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ protected createNode(value: T): SingleLinkedNode<T>;
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ protected insertNodeBetweenTwoNodesImpl(targetNode: SingleLinkedNode<T>, leftNode: SingleLinkedNode<T>, rightNode: SingleLinkedNode<T>): void;
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ protected deleteNodeImpl(node: SingleLinkedNode<T>): void;
36
+ /**
37
+ * @inheritDoc
38
+ */
39
+ protected popImpl(): void;
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ protected shiftImpl(): void;
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ reverse(): void;
48
+ /**
49
+ * List iterator
50
+ */
51
+ iterator(fromIndex?: number): IIterator<T>;
52
+ }