data-structure-typed 1.49.1 → 1.49.3

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 (106) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -16
  3. package/README_zh-CN.md +2 -2
  4. package/benchmark/report.html +46 -1
  5. package/benchmark/report.json +457 -22
  6. package/dist/cjs/data-structures/base/iterable-base.d.ts +11 -0
  7. package/dist/cjs/data-structures/base/iterable-base.js +21 -0
  8. package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
  9. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +7 -7
  10. package/dist/cjs/data-structures/graph/abstract-graph.js +43 -12
  11. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  12. package/dist/cjs/data-structures/graph/directed-graph.d.ts +2 -2
  13. package/dist/cjs/data-structures/graph/directed-graph.js +2 -2
  14. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  15. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +1 -1
  16. package/dist/cjs/data-structures/graph/undirected-graph.js +1 -1
  17. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  18. package/dist/cjs/data-structures/hash/hash-map.d.ts +9 -9
  19. package/dist/cjs/data-structures/hash/hash-map.js +16 -15
  20. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  21. package/dist/cjs/data-structures/heap/heap.d.ts +6 -35
  22. package/dist/cjs/data-structures/heap/heap.js +10 -42
  23. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  24. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +99 -105
  25. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +143 -146
  26. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  27. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +16 -21
  28. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +42 -42
  29. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  30. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +25 -25
  31. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +36 -36
  32. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  33. package/dist/cjs/data-structures/queue/deque.d.ts +70 -75
  34. package/dist/cjs/data-structures/queue/deque.js +100 -110
  35. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  36. package/dist/cjs/data-structures/queue/queue.d.ts +37 -38
  37. package/dist/cjs/data-structures/queue/queue.js +46 -49
  38. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  39. package/dist/cjs/data-structures/stack/stack.d.ts +2 -3
  40. package/dist/cjs/data-structures/stack/stack.js +2 -5
  41. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  42. package/dist/cjs/data-structures/trie/trie.d.ts +1 -2
  43. package/dist/cjs/data-structures/trie/trie.js +2 -5
  44. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  45. package/dist/mjs/data-structures/base/iterable-base.d.ts +11 -0
  46. package/dist/mjs/data-structures/base/iterable-base.js +21 -0
  47. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +7 -7
  48. package/dist/mjs/data-structures/graph/abstract-graph.js +43 -12
  49. package/dist/mjs/data-structures/graph/directed-graph.d.ts +2 -2
  50. package/dist/mjs/data-structures/graph/directed-graph.js +2 -2
  51. package/dist/mjs/data-structures/graph/undirected-graph.d.ts +1 -1
  52. package/dist/mjs/data-structures/graph/undirected-graph.js +1 -1
  53. package/dist/mjs/data-structures/hash/hash-map.d.ts +9 -9
  54. package/dist/mjs/data-structures/hash/hash-map.js +16 -15
  55. package/dist/mjs/data-structures/heap/heap.d.ts +6 -35
  56. package/dist/mjs/data-structures/heap/heap.js +10 -42
  57. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +99 -105
  58. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +142 -145
  59. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +16 -21
  60. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +43 -43
  61. package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +25 -25
  62. package/dist/mjs/data-structures/linked-list/skip-linked-list.js +36 -36
  63. package/dist/mjs/data-structures/queue/deque.d.ts +70 -75
  64. package/dist/mjs/data-structures/queue/deque.js +100 -110
  65. package/dist/mjs/data-structures/queue/queue.d.ts +37 -38
  66. package/dist/mjs/data-structures/queue/queue.js +45 -48
  67. package/dist/mjs/data-structures/stack/stack.d.ts +2 -3
  68. package/dist/mjs/data-structures/stack/stack.js +2 -5
  69. package/dist/mjs/data-structures/trie/trie.d.ts +1 -2
  70. package/dist/mjs/data-structures/trie/trie.js +2 -5
  71. package/dist/umd/data-structure-typed.js +531 -532
  72. package/dist/umd/data-structure-typed.min.js +2 -2
  73. package/dist/umd/data-structure-typed.min.js.map +1 -1
  74. package/package.json +1 -1
  75. package/src/data-structures/base/iterable-base.ts +24 -0
  76. package/src/data-structures/graph/abstract-graph.ts +55 -14
  77. package/src/data-structures/graph/directed-graph.ts +3 -2
  78. package/src/data-structures/graph/undirected-graph.ts +1 -1
  79. package/src/data-structures/hash/hash-map.ts +27 -28
  80. package/src/data-structures/heap/heap.ts +19 -57
  81. package/src/data-structures/linked-list/doubly-linked-list.ts +157 -161
  82. package/src/data-structures/linked-list/singly-linked-list.ts +49 -49
  83. package/src/data-structures/linked-list/skip-linked-list.ts +40 -40
  84. package/src/data-structures/queue/deque.ts +122 -135
  85. package/src/data-structures/queue/queue.ts +54 -58
  86. package/src/data-structures/stack/stack.ts +4 -8
  87. package/src/data-structures/trie/trie.ts +5 -9
  88. package/test/performance/data-structures/comparison/comparison.test.ts +6 -6
  89. package/test/performance/data-structures/heap/heap.test.ts +2 -2
  90. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +2 -2
  91. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +2 -2
  92. package/test/performance/data-structures/priority-queue/priority-queue.test.ts +2 -2
  93. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +2 -2
  94. package/test/unit/data-structures/graph/abstract-graph.test.ts +1 -1
  95. package/test/unit/data-structures/graph/directed-graph.test.ts +48 -3
  96. package/test/unit/data-structures/graph/undirected-graph.test.ts +48 -4
  97. package/test/unit/data-structures/hash/hash-map.test.ts +2 -2
  98. package/test/unit/data-structures/heap/heap.test.ts +6 -1
  99. package/test/unit/data-structures/heap/min-heap.test.ts +1 -1
  100. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +30 -30
  101. package/test/unit/data-structures/linked-list/linked-list.test.ts +1 -1
  102. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +21 -21
  103. package/test/unit/data-structures/linked-list/skip-list.test.ts +2 -2
  104. package/test/unit/data-structures/queue/deque.test.ts +5 -5
  105. package/test/unit/data-structures/queue/queue.test.ts +4 -4
  106. package/test/unit/data-structures/trie/trie.test.ts +1 -1
@@ -22,13 +22,13 @@ export class DoublyLinkedListNode {
22
22
  */
23
23
  export class DoublyLinkedList extends IterableElementBase {
24
24
  /**
25
- * The constructor initializes the linked list with an empty head, tail, and length.
25
+ * The constructor initializes the linked list with an empty head, tail, and size.
26
26
  */
27
27
  constructor(elements) {
28
28
  super();
29
29
  this._head = undefined;
30
30
  this._tail = undefined;
31
- this._length = 0;
31
+ this._size = 0;
32
32
  if (elements) {
33
33
  for (const el of elements) {
34
34
  this.push(el);
@@ -43,19 +43,44 @@ export class DoublyLinkedList extends IterableElementBase {
43
43
  get tail() {
44
44
  return this._tail;
45
45
  }
46
- _length;
47
- get length() {
48
- return this._length;
49
- }
46
+ _size;
50
47
  get size() {
51
- return this.length;
48
+ return this._size;
52
49
  }
53
50
  /**
54
- * Time Complexity: O(n), where n is the length of the input array.
51
+ * Time Complexity: O(n), where n is the size of the input array.
55
52
  * Space Complexity: O(n)
56
53
  */
57
54
  /**
58
- * Time Complexity: O(n), where n is the length of the input array.
55
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
56
+ * Space Complexity: O(1)
57
+ *
58
+ * The `get first` function returns the first node in a doubly linked list, or undefined if the list is empty.
59
+ * @returns The method `get first()` returns the first node of the doubly linked list, or `undefined` if the list is empty.
60
+ */
61
+ get first() {
62
+ return this.head?.value;
63
+ }
64
+ /**
65
+ * Time Complexity: O(1)
66
+ * Space Complexity: O(1)
67
+ */
68
+ /**
69
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
70
+ * Space Complexity: O(1)
71
+ *
72
+ * The `get last` function returns the last node in a doubly linked list, or undefined if the list is empty.
73
+ * @returns The method `get last()` returns the last node of the doubly linked list, or `undefined` if the list is empty.
74
+ */
75
+ get last() {
76
+ return this.tail?.value;
77
+ }
78
+ /**
79
+ * Time Complexity: O(1)
80
+ * Space Complexity: O(1)
81
+ */
82
+ /**
83
+ * Time Complexity: O(n), where n is the size of the input array.
59
84
  * Space Complexity: O(n)
60
85
  *
61
86
  * The `fromArray` function creates a new instance of a DoublyLinkedList and populates it with the elements from the
@@ -92,21 +117,8 @@ export class DoublyLinkedList extends IterableElementBase {
92
117
  this.tail.next = newNode;
93
118
  this._tail = newNode;
94
119
  }
95
- this._length++;
96
- }
97
- /**
98
- * Time Complexity: O(1)
99
- * Space Complexity: O(1)
100
- */
101
- /**
102
- * Time Complexity: O(1)
103
- * Space Complexity: O(1)
104
- *
105
- * The addLast function adds a new node with the given value to the end of the doubly linked list.
106
- * @param {E} value - The value to be added to the linked list.
107
- */
108
- addLast(value) {
109
- this.push(value);
120
+ this._size++;
121
+ return true;
110
122
  }
111
123
  /**
112
124
  * Time Complexity: O(1)
@@ -132,26 +144,11 @@ export class DoublyLinkedList extends IterableElementBase {
132
144
  this._tail = removedNode.prev;
133
145
  this.tail.next = undefined;
134
146
  }
135
- this._length--;
147
+ this._size--;
136
148
  return removedNode.value;
137
149
  }
138
150
  /**
139
- * Time Complexity: O(1)
140
- * Space Complexity: O(1)
141
- */
142
- /**
143
- * Time Complexity: O(1)
144
- * Space Complexity: O(1)
145
- *
146
- * The `pollLast()` function removes and returns the value of the last node in a doubly linked list.
147
- * @returns The method is returning the value of the removed node (removedNode.value) if the list is not empty. If the
148
- * list is empty, it returns undefined.
149
- */
150
- pollLast() {
151
- return this.pop();
152
- }
153
- /**
154
- * Time Complexity: O(1)
151
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
155
152
  * Space Complexity: O(1)
156
153
  */
157
154
  /**
@@ -174,26 +171,11 @@ export class DoublyLinkedList extends IterableElementBase {
174
171
  this._head = removedNode.next;
175
172
  this.head.prev = undefined;
176
173
  }
177
- this._length--;
174
+ this._size--;
178
175
  return removedNode.value;
179
176
  }
180
177
  /**
181
- * Time Complexity: O(1)
182
- * Space Complexity: O(1)
183
- */
184
- /**
185
- * Time Complexity: O(1)
186
- * Space Complexity: O(1)
187
- *
188
- * The `pollFirst()` function removes and returns the value of the first node in a doubly linked list.
189
- * @returns The method `shift()` returns the value of the node that is removed from the beginning of the doubly linked
190
- * list.
191
- */
192
- pollFirst() {
193
- return this.shift();
194
- }
195
- /**
196
- * Time Complexity: O(1)
178
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
197
179
  * Space Complexity: O(1)
198
180
  */
199
181
  /**
@@ -215,50 +197,8 @@ export class DoublyLinkedList extends IterableElementBase {
215
197
  this.head.prev = newNode;
216
198
  this._head = newNode;
217
199
  }
218
- this._length++;
219
- }
220
- /**
221
- * Time Complexity: O(1)
222
- * Space Complexity: O(1)
223
- */
224
- /**
225
- * Time Complexity: O(1)
226
- * Space Complexity: O(1)
227
- *
228
- * The addFirst function adds a new node with the given value to the beginning of a doubly linked list.
229
- * @param {E} value - The `value` parameter represents the value of the new node that will be added to the beginning of the
230
- * doubly linked list.
231
- */
232
- addFirst(value) {
233
- this.unshift(value);
234
- }
235
- /**
236
- * Time Complexity: O(n), where n is the number of elements in the linked list.
237
- * Space Complexity: O(1)
238
- */
239
- /**
240
- * Time Complexity: O(n), where n is the number of elements in the linked list.
241
- * Space Complexity: O(1)
242
- *
243
- * The `getFirst` function returns the first node in a doubly linked list, or undefined if the list is empty.
244
- * @returns The method `getFirst()` returns the first node of the doubly linked list, or `undefined` if the list is empty.
245
- */
246
- getFirst() {
247
- return this.head?.value;
248
- }
249
- /**
250
- * Time Complexity: O(n), where n is the number of elements in the linked list.
251
- * Space Complexity: O(1)
252
- */
253
- /**
254
- * Time Complexity: O(n), where n is the number of elements in the linked list.
255
- * Space Complexity: O(1)
256
- *
257
- * The `getLast` function returns the last node in a doubly linked list, or undefined if the list is empty.
258
- * @returns The method `getLast()` returns the last node of the doubly linked list, or `undefined` if the list is empty.
259
- */
260
- getLast() {
261
- return this.tail?.value;
200
+ this._size++;
201
+ return true;
262
202
  }
263
203
  /**
264
204
  * Time Complexity: O(n), where n is the number of elements in the linked list.
@@ -275,7 +215,7 @@ export class DoublyLinkedList extends IterableElementBase {
275
215
  * or the linked list is empty, it will return undefined.
276
216
  */
277
217
  getAt(index) {
278
- if (index < 0 || index >= this.length)
218
+ if (index < 0 || index >= this.size)
279
219
  return undefined;
280
220
  let current = this.head;
281
221
  for (let i = 0; i < index; i++) {
@@ -299,7 +239,7 @@ export class DoublyLinkedList extends IterableElementBase {
299
239
  * valid range of the linked list, otherwise it returns `undefined`.
300
240
  */
301
241
  getNodeAt(index) {
302
- if (index < 0 || index >= this.length)
242
+ if (index < 0 || index >= this.size)
303
243
  return undefined;
304
244
  let current = this.head;
305
245
  for (let i = 0; i < index; i++) {
@@ -347,14 +287,14 @@ export class DoublyLinkedList extends IterableElementBase {
347
287
  * @returns The `insert` method returns a boolean value. It returns `true` if the insertion is successful, and `false`
348
288
  * if the index is out of bounds.
349
289
  */
350
- insertAt(index, value) {
351
- if (index < 0 || index > this.length)
290
+ addAt(index, value) {
291
+ if (index < 0 || index > this.size)
352
292
  return false;
353
293
  if (index === 0) {
354
294
  this.unshift(value);
355
295
  return true;
356
296
  }
357
- if (index === this.length) {
297
+ if (index === this.size) {
358
298
  this.push(value);
359
299
  return true;
360
300
  }
@@ -365,7 +305,7 @@ export class DoublyLinkedList extends IterableElementBase {
365
305
  newNode.next = nextNode;
366
306
  prevNode.next = newNode;
367
307
  nextNode.prev = newNode;
368
- this._length++;
308
+ this._size++;
369
309
  return true;
370
310
  }
371
311
  /**
@@ -376,7 +316,7 @@ export class DoublyLinkedList extends IterableElementBase {
376
316
  * Time Complexity: O(n), where n is the number of elements in the linked list.
377
317
  * Space Complexity: O(1)
378
318
  *
379
- * The `insertBefore` function inserts a new value before an existing value or node in a doubly linked list.
319
+ * The `addBefore` function inserts a new value before an existing value or node in a doubly linked list.
380
320
  * @param {E | DoublyLinkedListNode<E>} existingValueOrNode - The existing value or node in the doubly linked list
381
321
  * before which the new value will be inserted. It can be either the value of the existing node or the existing node
382
322
  * itself.
@@ -385,7 +325,7 @@ export class DoublyLinkedList extends IterableElementBase {
385
325
  * @returns The method returns a boolean value. It returns `true` if the insertion is successful, and `false` if the
386
326
  * insertion fails.
387
327
  */
388
- insertBefore(existingValueOrNode, newValue) {
328
+ addBefore(existingValueOrNode, newValue) {
389
329
  let existingNode;
390
330
  if (existingValueOrNode instanceof DoublyLinkedListNode) {
391
331
  existingNode = existingValueOrNode;
@@ -404,7 +344,7 @@ export class DoublyLinkedList extends IterableElementBase {
404
344
  if (existingNode === this.head) {
405
345
  this._head = newNode;
406
346
  }
407
- this._length++;
347
+ this._size++;
408
348
  return true;
409
349
  }
410
350
  return false;
@@ -417,7 +357,7 @@ export class DoublyLinkedList extends IterableElementBase {
417
357
  * Time Complexity: O(n), where n is the number of elements in the linked list.
418
358
  * Space Complexity: O(1)
419
359
  *
420
- * The `insertAfter` function inserts a new node with a given value after an existing node in a doubly linked list.
360
+ * The `addAfter` function inserts a new node with a given value after an existing node in a doubly linked list.
421
361
  * @param {E | DoublyLinkedListNode<E>} existingValueOrNode - The existing value or node in the doubly linked list
422
362
  * after which the new value will be inserted. It can be either the value of the existing node or the existing node
423
363
  * itself.
@@ -425,7 +365,7 @@ export class DoublyLinkedList extends IterableElementBase {
425
365
  * @returns The method returns a boolean value. It returns true if the insertion is successful, and false if the
426
366
  * existing value or node is not found in the doubly linked list.
427
367
  */
428
- insertAfter(existingValueOrNode, newValue) {
368
+ addAfter(existingValueOrNode, newValue) {
429
369
  let existingNode;
430
370
  if (existingValueOrNode instanceof DoublyLinkedListNode) {
431
371
  existingNode = existingValueOrNode;
@@ -444,15 +384,11 @@ export class DoublyLinkedList extends IterableElementBase {
444
384
  if (existingNode === this.tail) {
445
385
  this._tail = newNode;
446
386
  }
447
- this._length++;
387
+ this._size++;
448
388
  return true;
449
389
  }
450
390
  return false;
451
391
  }
452
- /**
453
- * Time Complexity: O(n), where n is the number of elements in the linked list.
454
- * Space Complexity: O(1)
455
- */
456
392
  /**
457
393
  * Time Complexity: O(n), where n is the number of elements in the linked list.
458
394
  * Space Complexity: O(1)
@@ -464,24 +400,24 @@ export class DoublyLinkedList extends IterableElementBase {
464
400
  * bounds.
465
401
  */
466
402
  deleteAt(index) {
467
- if (index < 0 || index >= this.length)
468
- return undefined;
469
- if (index === 0)
470
- return this.shift();
471
- if (index === this.length - 1)
472
- return this.pop();
403
+ if (index < 0 || index >= this.size)
404
+ return false;
405
+ if (index === 0) {
406
+ this.shift();
407
+ return true;
408
+ }
409
+ if (index === this.size - 1) {
410
+ this.pop();
411
+ return true;
412
+ }
473
413
  const removedNode = this.getNodeAt(index);
474
414
  const prevNode = removedNode.prev;
475
415
  const nextNode = removedNode.next;
476
416
  prevNode.next = nextNode;
477
417
  nextNode.prev = prevNode;
478
- this._length--;
479
- return removedNode.value;
418
+ this._size--;
419
+ return true;
480
420
  }
481
- /**
482
- * Time Complexity: O(n), where n is the number of elements in the linked list.
483
- * Space Complexity: O(1)
484
- */
485
421
  /**
486
422
  * Time Complexity: O(n), where n is the number of elements in the linked list.
487
423
  * Space Complexity: O(1)
@@ -512,26 +448,34 @@ export class DoublyLinkedList extends IterableElementBase {
512
448
  const nextNode = node.next;
513
449
  prevNode.next = nextNode;
514
450
  nextNode.prev = prevNode;
515
- this._length--;
451
+ this._size--;
516
452
  }
517
453
  return true;
518
454
  }
519
455
  return false;
520
456
  }
521
457
  /**
522
- * The function checks if a variable has a length greater than zero and returns a boolean value.
458
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
459
+ * Space Complexity: O(1)
460
+ */
461
+ /**
462
+ * The function checks if a variable has a size greater than zero and returns a boolean value.
523
463
  * @returns A boolean value is being returned.
524
464
  */
525
465
  isEmpty() {
526
- return this.length === 0;
466
+ return this.size === 0;
527
467
  }
528
468
  /**
529
- * The `clear` function resets the linked list by setting the head, tail, and length to undefined and 0 respectively.
469
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
470
+ * Space Complexity: O(1)
471
+ */
472
+ /**
473
+ * The `clear` function resets the linked list by setting the head, tail, and size to undefined and 0 respectively.
530
474
  */
531
475
  clear() {
532
476
  this._head = undefined;
533
477
  this._tail = undefined;
534
- this._length = 0;
478
+ this._size = 0;
535
479
  }
536
480
  /**
537
481
  * Time Complexity: O(n), where n is the number of elements in the linked list.
@@ -585,7 +529,7 @@ export class DoublyLinkedList extends IterableElementBase {
585
529
  }
586
530
  /**
587
531
  * Time Complexity: O(n), where n is the number of elements in the linked list.
588
- * Space Complexity: O(1)
532
+ * Space Complexity: O(n)
589
533
  */
590
534
  /**
591
535
  * Time Complexity: O(n), where n is the number of elements in the linked list.
@@ -610,7 +554,7 @@ export class DoublyLinkedList extends IterableElementBase {
610
554
  }
611
555
  /**
612
556
  * Time Complexity: O(n), where n is the number of elements in the linked list.
613
- * Space Complexity: O(1)
557
+ * Space Complexity: O(n)
614
558
  */
615
559
  /**
616
560
  * Time Complexity: O(n), where n is the number of elements in the linked list.
@@ -626,9 +570,10 @@ export class DoublyLinkedList extends IterableElementBase {
626
570
  [current.prev, current.next] = [current.next, current.prev];
627
571
  current = next;
628
572
  }
573
+ return this;
629
574
  }
630
575
  /**
631
- * Time Complexity: O(n), where n is the number of elements in the linked list.
576
+ * Time Complexity: O(n)
632
577
  * Space Complexity: O(n)
633
578
  */
634
579
  /**
@@ -668,8 +613,8 @@ export class DoublyLinkedList extends IterableElementBase {
668
613
  return array;
669
614
  }
670
615
  /**
671
- * Time Complexity: O(n)
672
- * Space Complexity: O(n)
616
+ * Time Complexity: O(1)
617
+ * Space Complexity: O(1)
673
618
  */
674
619
  /**
675
620
  * Time Complexity: O(n)
@@ -700,8 +645,8 @@ export class DoublyLinkedList extends IterableElementBase {
700
645
  return filteredList;
701
646
  }
702
647
  /**
703
- * Time Complexity: O(n), where n is the number of elements in the linked list.
704
- * Space Complexity: O(n)
648
+ * Time Complexity: O(1)
649
+ * Space Complexity: O(1)
705
650
  */
706
651
  /**
707
652
  * Time Complexity: O(n)
@@ -729,12 +674,64 @@ export class DoublyLinkedList extends IterableElementBase {
729
674
  }
730
675
  return mappedList;
731
676
  }
677
+ /**
678
+ * Time Complexity: O(1)
679
+ * Space Complexity: O(1)
680
+ */
681
+ /**
682
+ * Time Complexity: O(1)
683
+ * Space Complexity: O(1)
684
+ *
685
+ * The addLast function adds a new node with the given value to the end of the doubly linked list.
686
+ * @param {E} value - The value to be added to the linked list.
687
+ */
688
+ addLast(value) {
689
+ return this.push(value);
690
+ }
691
+ /**
692
+ * Time Complexity: O(1)
693
+ * Space Complexity: O(1)
694
+ */
695
+ /**
696
+ * Time Complexity: O(1)
697
+ * Space Complexity: O(1)
698
+ *
699
+ * The `pollLast()` function removes and returns the value of the last node in a doubly linked list.
700
+ * @returns The method is returning the value of the removed node (removedNode.value) if the list is not empty. If the
701
+ * list is empty, it returns undefined.
702
+ */
703
+ pollLast() {
704
+ return this.pop();
705
+ }
732
706
  /**
733
707
  * Time Complexity: O(n), where n is the number of elements in the linked list.
734
- * Space Complexity: O(n)
708
+ * Space Complexity: O(1)
735
709
  */
736
- print() {
737
- console.log([...this]);
710
+ /**
711
+ * Time Complexity: O(1)
712
+ * Space Complexity: O(1)
713
+ *
714
+ * The `pollFirst()` function removes and returns the value of the first node in a doubly linked list.
715
+ * @returns The method `shift()` returns the value of the node that is removed from the beginning of the doubly linked
716
+ * list.
717
+ */
718
+ pollFirst() {
719
+ return this.shift();
720
+ }
721
+ /**
722
+ * Time Complexity: O(n), where n is the number of elements in the linked list.
723
+ * Space Complexity: O(1)
724
+ */
725
+ /**
726
+ * Time Complexity: O(1)
727
+ * Space Complexity: O(1)
728
+ *
729
+ * The addFirst function adds a new node with the given value to the beginning of a doubly linked list.
730
+ * @param {E} value - The `value` parameter represents the value of the new node that will be added to the beginning of the
731
+ * doubly linked list.
732
+ */
733
+ addFirst(value) {
734
+ this.unshift(value);
738
735
  }
739
736
  /**
740
737
  * The function returns an iterator that iterates over the values of a linked list.
@@ -26,8 +26,8 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
26
26
  get head(): SinglyLinkedListNode<E> | undefined;
27
27
  protected _tail: SinglyLinkedListNode<E> | undefined;
28
28
  get tail(): SinglyLinkedListNode<E> | undefined;
29
- protected _length: number;
30
- get length(): number;
29
+ protected _size: number;
30
+ get size(): number;
31
31
  /**
32
32
  * Time Complexity: O(n) - Linear time, where n is the length of the input array, as it performs a loop to push each element into the linked list.
33
33
  * Space Complexity: O(n) - Linear space, as it creates a new node for each element in the array.
@@ -54,7 +54,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
54
54
  * @param {E} value - The "value" parameter represents the value that you want to add to the linked list. It can be of
55
55
  * any type (E) as specified in the generic type declaration of the class or function.
56
56
  */
57
- push(value: E): void;
57
+ push(value: E): boolean;
58
58
  /**
59
59
  * Time Complexity: O(1) - Constant time, as it involves basic pointer adjustments.
60
60
  * Space Complexity: O(1) - Constant space, as it only creates a new node.
@@ -67,7 +67,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
67
67
  * @param {E} value - The "value" parameter represents the value that you want to add to the linked list. It can be of
68
68
  * any type (E) as specified in the generic type declaration of the class or function.
69
69
  */
70
- addLast(value: E): void;
70
+ addLast(value: E): boolean;
71
71
  /**
72
72
  * Time Complexity: O(n) - Linear time in the worst case, as it may need to traverse the list to find the last element.
73
73
  * Space Complexity: O(1) - Constant space.
@@ -132,7 +132,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
132
132
  * @param {E} value - The parameter "value" represents the value of the new node that will be added to the beginning of the
133
133
  * linked list.
134
134
  */
135
- unshift(value: E): void;
135
+ unshift(value: E): boolean;
136
136
  /**
137
137
  * Time Complexity: O(1) - Constant time, as it involves adjusting pointers at the head.
138
138
  * Space Complexity: O(1) - Constant space.
@@ -145,7 +145,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
145
145
  * @param {E} value - The parameter "value" represents the value of the new node that will be added to the beginning of the
146
146
  * linked list.
147
147
  */
148
- addFirst(value: E): void;
148
+ addFirst(value: E): boolean;
149
149
  /**
150
150
  * Time Complexity: O(n) - Linear time, where n is the index, as it may need to traverse the list to find the desired node.
151
151
  * Space Complexity: O(1) - Constant space.
@@ -190,7 +190,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
190
190
  * @returns The method `deleteAt` returns the value of the node that was deleted, or `undefined` if the index is out of
191
191
  * bounds.
192
192
  */
193
- deleteAt(index: number): E | undefined;
193
+ deleteAt(index: number): boolean;
194
194
  /**
195
195
  * Time Complexity: O(n) - Linear time, where n is the index, as it may need to traverse the list to find the desired node.
196
196
  * Space Complexity: O(1) - Constant space.
@@ -205,7 +205,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
205
205
  * @returns The `delete` method returns a boolean value. It returns `true` if the value or node is found and
206
206
  * successfully deleted from the linked list, and `false` if the value or node is not found in the linked list.
207
207
  */
208
- delete(valueOrNode: E | SinglyLinkedListNode<E> | undefined | undefined): boolean;
208
+ delete(valueOrNode: E | SinglyLinkedListNode<E> | undefined): boolean;
209
209
  /**
210
210
  * Time Complexity: O(n) - Linear time, where n is the index, as it may need to traverse the list to find the desired node.
211
211
  * Space Complexity: O(1) - Constant space.
@@ -214,7 +214,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
214
214
  * Time Complexity: O(n) - Linear time, where n is the index, as it may need to traverse the list to find the desired node.
215
215
  * Space Complexity: O(1) - Constant space.
216
216
  *
217
- * The `insertAt` function inserts a value at a specified index in a singly linked list.
217
+ * The `addAt` function inserts a value at a specified index in a singly linked list.
218
218
  * @param {number} index - The index parameter represents the position at which the new value should be inserted in the
219
219
  * linked list. It is of type number.
220
220
  * @param {E} value - The `value` parameter represents the value that you want to insert into the linked list at the
@@ -222,7 +222,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
222
222
  * @returns The `insert` method returns a boolean value. It returns `true` if the insertion is successful, and `false`
223
223
  * if the index is out of bounds.
224
224
  */
225
- insertAt(index: number, value: E): boolean;
225
+ addAt(index: number, value: E): boolean;
226
226
  /**
227
227
  * The function checks if the length of a data structure is equal to zero and returns a boolean value indicating
228
228
  * whether it is empty or not.
@@ -256,7 +256,7 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
256
256
  * The `reverse` function reverses the order of the nodes in a singly linked list.
257
257
  * @returns The reverse() method does not return anything. It has a return type of void.
258
258
  */
259
- reverse(): void;
259
+ reverse(): this;
260
260
  /**
261
261
  * Time Complexity: O(n) - Linear time, where n is the length of the list, as it needs to reverse the pointers of each node.
262
262
  * Space Complexity: O(1) - Constant space.
@@ -309,14 +309,14 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
309
309
  * Time Complexity: O(n) - Linear time, where n is the length of the list, as it needs to reverse the pointers of each node.
310
310
  * Space Complexity: O(1) - Constant space.
311
311
  *
312
- * The `insertBefore` function inserts a new value before an existing value in a singly linked list.
312
+ * The `addBefore` function inserts a new value before an existing value in a singly linked list.
313
313
  * @param {E | SinglyLinkedListNode<E>} existingValueOrNode - The existing value or node that you want to insert the
314
314
  * new value before. It can be either the value itself or a node containing the value in the linked list.
315
315
  * @param {E} newValue - The `newValue` parameter represents the value that you want to insert into the linked list.
316
- * @returns The method `insertBefore` returns a boolean value. It returns `true` if the new value was successfully
316
+ * @returns The method `addBefore` returns a boolean value. It returns `true` if the new value was successfully
317
317
  * inserted before the existing value, and `false` otherwise.
318
318
  */
319
- insertBefore(existingValueOrNode: E | SinglyLinkedListNode<E>, newValue: E): boolean;
319
+ addBefore(existingValueOrNode: E | SinglyLinkedListNode<E>, newValue: E): boolean;
320
320
  /**
321
321
  * Time Complexity: O(n) - Linear time, where n is the length of the list, as it needs to reverse the pointers of each node.
322
322
  * Space Complexity: O(1) - Constant space.
@@ -325,14 +325,14 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
325
325
  * Time Complexity: O(n) - Linear time, where n is the length of the list, as it needs to reverse the pointers of each node.
326
326
  * Space Complexity: O(1) - Constant space.
327
327
  *
328
- * The `insertAfter` function inserts a new node with a given value after an existing node in a singly linked list.
328
+ * The `addAfter` function inserts a new node with a given value after an existing node in a singly linked list.
329
329
  * @param {E | SinglyLinkedListNode<E>} existingValueOrNode - The existing value or node in the linked list after which
330
330
  * the new value will be inserted. It can be either the value of the existing node or the existing node itself.
331
331
  * @param {E} newValue - The value that you want to insert into the linked list after the existing value or node.
332
332
  * @returns The method returns a boolean value. It returns true if the new value was successfully inserted after the
333
333
  * existing value or node, and false if the existing value or node was not found in the linked list.
334
334
  */
335
- insertAfter(existingValueOrNode: E | SinglyLinkedListNode<E>, newValue: E): boolean;
335
+ addAfter(existingValueOrNode: E | SinglyLinkedListNode<E>, newValue: E): boolean;
336
336
  /**
337
337
  * Time Complexity: O(n) - Linear time, where n is the length of the list, as it needs to reverse the pointers of each node.
338
338
  * Space Complexity: O(1) - Constant space.
@@ -387,10 +387,5 @@ export declare class SinglyLinkedList<E = any> extends IterableElementBase<E> {
387
387
  * of applying the provided `callback` function to each element in the original list.
388
388
  */
389
389
  map<T>(callback: ElementCallback<E, T>, thisArg?: any): SinglyLinkedList<T>;
390
- /**
391
- * Time Complexity: O(n), where n is the number of elements in the linked list.
392
- * Space Complexity: O(n)
393
- */
394
- print(): void;
395
390
  protected _getIterator(): IterableIterator<E>;
396
391
  }