data-structure-typed 1.49.1 → 1.49.2
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/CHANGELOG.md +1 -1
- package/README.md +16 -16
- package/README_zh-CN.md +2 -2
- package/benchmark/report.html +46 -1
- package/benchmark/report.json +457 -22
- package/dist/cjs/data-structures/base/iterable-base.d.ts +11 -0
- package/dist/cjs/data-structures/base/iterable-base.js +21 -0
- package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +9 -9
- package/dist/cjs/data-structures/hash/hash-map.js +16 -15
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +6 -35
- package/dist/cjs/data-structures/heap/heap.js +10 -42
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +87 -93
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +126 -129
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +16 -21
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +42 -42
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js +2 -2
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +70 -75
- package/dist/cjs/data-structures/queue/deque.js +100 -110
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +13 -14
- package/dist/cjs/data-structures/queue/queue.js +15 -18
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/data-structures/stack/stack.d.ts +2 -3
- package/dist/cjs/data-structures/stack/stack.js +2 -5
- package/dist/cjs/data-structures/stack/stack.js.map +1 -1
- package/dist/cjs/data-structures/trie/trie.d.ts +1 -2
- package/dist/cjs/data-structures/trie/trie.js +2 -5
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/mjs/data-structures/base/iterable-base.d.ts +11 -0
- package/dist/mjs/data-structures/base/iterable-base.js +21 -0
- package/dist/mjs/data-structures/hash/hash-map.d.ts +9 -9
- package/dist/mjs/data-structures/hash/hash-map.js +16 -15
- package/dist/mjs/data-structures/heap/heap.d.ts +6 -35
- package/dist/mjs/data-structures/heap/heap.js +10 -42
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +87 -93
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +125 -128
- package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +16 -21
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js +43 -43
- package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
- package/dist/mjs/data-structures/linked-list/skip-linked-list.js +2 -2
- package/dist/mjs/data-structures/queue/deque.d.ts +70 -75
- package/dist/mjs/data-structures/queue/deque.js +100 -110
- package/dist/mjs/data-structures/queue/queue.d.ts +13 -14
- package/dist/mjs/data-structures/queue/queue.js +15 -18
- package/dist/mjs/data-structures/stack/stack.d.ts +2 -3
- package/dist/mjs/data-structures/stack/stack.js +2 -5
- package/dist/mjs/data-structures/trie/trie.d.ts +1 -2
- package/dist/mjs/data-structures/trie/trie.js +2 -5
- package/dist/umd/data-structure-typed.js +338 -370
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +1 -1
- package/src/data-structures/base/iterable-base.ts +24 -0
- package/src/data-structures/hash/hash-map.ts +27 -28
- package/src/data-structures/heap/heap.ts +19 -57
- package/src/data-structures/linked-list/doubly-linked-list.ts +138 -142
- package/src/data-structures/linked-list/singly-linked-list.ts +49 -49
- package/src/data-structures/linked-list/skip-linked-list.ts +2 -2
- package/src/data-structures/queue/deque.ts +122 -135
- package/src/data-structures/queue/queue.ts +19 -23
- package/src/data-structures/stack/stack.ts +4 -8
- package/src/data-structures/trie/trie.ts +5 -9
- package/test/performance/data-structures/comparison/comparison.test.ts +6 -6
- package/test/performance/data-structures/heap/heap.test.ts +2 -2
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +2 -2
- package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +2 -2
- package/test/performance/data-structures/priority-queue/priority-queue.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +2 -2
- package/test/unit/data-structures/hash/hash-map.test.ts +2 -2
- package/test/unit/data-structures/heap/heap.test.ts +1 -1
- package/test/unit/data-structures/heap/min-heap.test.ts +1 -1
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +30 -30
- package/test/unit/data-structures/linked-list/linked-list.test.ts +1 -1
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +21 -21
- package/test/unit/data-structures/linked-list/skip-list.test.ts +2 -2
- package/test/unit/data-structures/queue/deque.test.ts +5 -5
- package/test/unit/data-structures/queue/queue.test.ts +4 -4
- 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
|
|
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.
|
|
31
|
+
this._size = 0;
|
|
32
32
|
if (elements) {
|
|
33
33
|
for (const el of elements) {
|
|
34
34
|
this.push(el);
|
|
@@ -43,19 +43,16 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
43
43
|
get tail() {
|
|
44
44
|
return this._tail;
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
get length() {
|
|
48
|
-
return this._length;
|
|
49
|
-
}
|
|
46
|
+
_size;
|
|
50
47
|
get size() {
|
|
51
|
-
return this.
|
|
48
|
+
return this._size;
|
|
52
49
|
}
|
|
53
50
|
/**
|
|
54
|
-
* Time Complexity: O(n), where n is the
|
|
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
|
|
55
|
+
* Time Complexity: O(n), where n is the size of the input array.
|
|
59
56
|
* Space Complexity: O(n)
|
|
60
57
|
*
|
|
61
58
|
* The `fromArray` function creates a new instance of a DoublyLinkedList and populates it with the elements from the
|
|
@@ -92,21 +89,8 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
92
89
|
this.tail.next = newNode;
|
|
93
90
|
this._tail = newNode;
|
|
94
91
|
}
|
|
95
|
-
this.
|
|
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);
|
|
92
|
+
this._size++;
|
|
93
|
+
return true;
|
|
110
94
|
}
|
|
111
95
|
/**
|
|
112
96
|
* Time Complexity: O(1)
|
|
@@ -132,24 +116,9 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
132
116
|
this._tail = removedNode.prev;
|
|
133
117
|
this.tail.next = undefined;
|
|
134
118
|
}
|
|
135
|
-
this.
|
|
119
|
+
this._size--;
|
|
136
120
|
return removedNode.value;
|
|
137
121
|
}
|
|
138
|
-
/**
|
|
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
122
|
/**
|
|
154
123
|
* Time Complexity: O(1)
|
|
155
124
|
* Space Complexity: O(1)
|
|
@@ -174,24 +143,9 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
174
143
|
this._head = removedNode.next;
|
|
175
144
|
this.head.prev = undefined;
|
|
176
145
|
}
|
|
177
|
-
this.
|
|
146
|
+
this._size--;
|
|
178
147
|
return removedNode.value;
|
|
179
148
|
}
|
|
180
|
-
/**
|
|
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
149
|
/**
|
|
196
150
|
* Time Complexity: O(1)
|
|
197
151
|
* Space Complexity: O(1)
|
|
@@ -215,50 +169,8 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
215
169
|
this.head.prev = newNode;
|
|
216
170
|
this._head = newNode;
|
|
217
171
|
}
|
|
218
|
-
this.
|
|
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;
|
|
172
|
+
this._size++;
|
|
173
|
+
return true;
|
|
262
174
|
}
|
|
263
175
|
/**
|
|
264
176
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
@@ -275,7 +187,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
275
187
|
* or the linked list is empty, it will return undefined.
|
|
276
188
|
*/
|
|
277
189
|
getAt(index) {
|
|
278
|
-
if (index < 0 || index >= this.
|
|
190
|
+
if (index < 0 || index >= this.size)
|
|
279
191
|
return undefined;
|
|
280
192
|
let current = this.head;
|
|
281
193
|
for (let i = 0; i < index; i++) {
|
|
@@ -299,7 +211,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
299
211
|
* valid range of the linked list, otherwise it returns `undefined`.
|
|
300
212
|
*/
|
|
301
213
|
getNodeAt(index) {
|
|
302
|
-
if (index < 0 || index >= this.
|
|
214
|
+
if (index < 0 || index >= this.size)
|
|
303
215
|
return undefined;
|
|
304
216
|
let current = this.head;
|
|
305
217
|
for (let i = 0; i < index; i++) {
|
|
@@ -347,14 +259,14 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
347
259
|
* @returns The `insert` method returns a boolean value. It returns `true` if the insertion is successful, and `false`
|
|
348
260
|
* if the index is out of bounds.
|
|
349
261
|
*/
|
|
350
|
-
|
|
351
|
-
if (index < 0 || index > this.
|
|
262
|
+
addAt(index, value) {
|
|
263
|
+
if (index < 0 || index > this.size)
|
|
352
264
|
return false;
|
|
353
265
|
if (index === 0) {
|
|
354
266
|
this.unshift(value);
|
|
355
267
|
return true;
|
|
356
268
|
}
|
|
357
|
-
if (index === this.
|
|
269
|
+
if (index === this.size) {
|
|
358
270
|
this.push(value);
|
|
359
271
|
return true;
|
|
360
272
|
}
|
|
@@ -365,7 +277,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
365
277
|
newNode.next = nextNode;
|
|
366
278
|
prevNode.next = newNode;
|
|
367
279
|
nextNode.prev = newNode;
|
|
368
|
-
this.
|
|
280
|
+
this._size++;
|
|
369
281
|
return true;
|
|
370
282
|
}
|
|
371
283
|
/**
|
|
@@ -376,7 +288,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
376
288
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
377
289
|
* Space Complexity: O(1)
|
|
378
290
|
*
|
|
379
|
-
* The `
|
|
291
|
+
* The `addBefore` function inserts a new value before an existing value or node in a doubly linked list.
|
|
380
292
|
* @param {E | DoublyLinkedListNode<E>} existingValueOrNode - The existing value or node in the doubly linked list
|
|
381
293
|
* before which the new value will be inserted. It can be either the value of the existing node or the existing node
|
|
382
294
|
* itself.
|
|
@@ -385,7 +297,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
385
297
|
* @returns The method returns a boolean value. It returns `true` if the insertion is successful, and `false` if the
|
|
386
298
|
* insertion fails.
|
|
387
299
|
*/
|
|
388
|
-
|
|
300
|
+
addBefore(existingValueOrNode, newValue) {
|
|
389
301
|
let existingNode;
|
|
390
302
|
if (existingValueOrNode instanceof DoublyLinkedListNode) {
|
|
391
303
|
existingNode = existingValueOrNode;
|
|
@@ -404,7 +316,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
404
316
|
if (existingNode === this.head) {
|
|
405
317
|
this._head = newNode;
|
|
406
318
|
}
|
|
407
|
-
this.
|
|
319
|
+
this._size++;
|
|
408
320
|
return true;
|
|
409
321
|
}
|
|
410
322
|
return false;
|
|
@@ -417,7 +329,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
417
329
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
418
330
|
* Space Complexity: O(1)
|
|
419
331
|
*
|
|
420
|
-
* The `
|
|
332
|
+
* The `addAfter` function inserts a new node with a given value after an existing node in a doubly linked list.
|
|
421
333
|
* @param {E | DoublyLinkedListNode<E>} existingValueOrNode - The existing value or node in the doubly linked list
|
|
422
334
|
* after which the new value will be inserted. It can be either the value of the existing node or the existing node
|
|
423
335
|
* itself.
|
|
@@ -425,7 +337,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
425
337
|
* @returns The method returns a boolean value. It returns true if the insertion is successful, and false if the
|
|
426
338
|
* existing value or node is not found in the doubly linked list.
|
|
427
339
|
*/
|
|
428
|
-
|
|
340
|
+
addAfter(existingValueOrNode, newValue) {
|
|
429
341
|
let existingNode;
|
|
430
342
|
if (existingValueOrNode instanceof DoublyLinkedListNode) {
|
|
431
343
|
existingNode = existingValueOrNode;
|
|
@@ -444,7 +356,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
444
356
|
if (existingNode === this.tail) {
|
|
445
357
|
this._tail = newNode;
|
|
446
358
|
}
|
|
447
|
-
this.
|
|
359
|
+
this._size++;
|
|
448
360
|
return true;
|
|
449
361
|
}
|
|
450
362
|
return false;
|
|
@@ -464,19 +376,23 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
464
376
|
* bounds.
|
|
465
377
|
*/
|
|
466
378
|
deleteAt(index) {
|
|
467
|
-
if (index < 0 || index >= this.
|
|
468
|
-
return
|
|
469
|
-
if (index === 0)
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
379
|
+
if (index < 0 || index >= this.size)
|
|
380
|
+
return false;
|
|
381
|
+
if (index === 0) {
|
|
382
|
+
this.shift();
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
if (index === this.size - 1) {
|
|
386
|
+
this.pop();
|
|
387
|
+
return true;
|
|
388
|
+
}
|
|
473
389
|
const removedNode = this.getNodeAt(index);
|
|
474
390
|
const prevNode = removedNode.prev;
|
|
475
391
|
const nextNode = removedNode.next;
|
|
476
392
|
prevNode.next = nextNode;
|
|
477
393
|
nextNode.prev = prevNode;
|
|
478
|
-
this.
|
|
479
|
-
return
|
|
394
|
+
this._size--;
|
|
395
|
+
return true;
|
|
480
396
|
}
|
|
481
397
|
/**
|
|
482
398
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
@@ -512,26 +428,26 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
512
428
|
const nextNode = node.next;
|
|
513
429
|
prevNode.next = nextNode;
|
|
514
430
|
nextNode.prev = prevNode;
|
|
515
|
-
this.
|
|
431
|
+
this._size--;
|
|
516
432
|
}
|
|
517
433
|
return true;
|
|
518
434
|
}
|
|
519
435
|
return false;
|
|
520
436
|
}
|
|
521
437
|
/**
|
|
522
|
-
* The function checks if a variable has a
|
|
438
|
+
* The function checks if a variable has a size greater than zero and returns a boolean value.
|
|
523
439
|
* @returns A boolean value is being returned.
|
|
524
440
|
*/
|
|
525
441
|
isEmpty() {
|
|
526
|
-
return this.
|
|
442
|
+
return this.size === 0;
|
|
527
443
|
}
|
|
528
444
|
/**
|
|
529
|
-
* The `clear` function resets the linked list by setting the head, tail, and
|
|
445
|
+
* The `clear` function resets the linked list by setting the head, tail, and size to undefined and 0 respectively.
|
|
530
446
|
*/
|
|
531
447
|
clear() {
|
|
532
448
|
this._head = undefined;
|
|
533
449
|
this._tail = undefined;
|
|
534
|
-
this.
|
|
450
|
+
this._size = 0;
|
|
535
451
|
}
|
|
536
452
|
/**
|
|
537
453
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
@@ -626,6 +542,7 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
626
542
|
[current.prev, current.next] = [current.next, current.prev];
|
|
627
543
|
current = next;
|
|
628
544
|
}
|
|
545
|
+
return this;
|
|
629
546
|
}
|
|
630
547
|
/**
|
|
631
548
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
@@ -729,12 +646,92 @@ export class DoublyLinkedList extends IterableElementBase {
|
|
|
729
646
|
}
|
|
730
647
|
return mappedList;
|
|
731
648
|
}
|
|
649
|
+
/**
|
|
650
|
+
* Time Complexity: O(1)
|
|
651
|
+
* Space Complexity: O(1)
|
|
652
|
+
*/
|
|
653
|
+
/**
|
|
654
|
+
* Time Complexity: O(1)
|
|
655
|
+
* Space Complexity: O(1)
|
|
656
|
+
*
|
|
657
|
+
* The addLast function adds a new node with the given value to the end of the doubly linked list.
|
|
658
|
+
* @param {E} value - The value to be added to the linked list.
|
|
659
|
+
*/
|
|
660
|
+
addLast(value) {
|
|
661
|
+
return this.push(value);
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Time Complexity: O(1)
|
|
665
|
+
* Space Complexity: O(1)
|
|
666
|
+
*/
|
|
667
|
+
/**
|
|
668
|
+
* Time Complexity: O(1)
|
|
669
|
+
* Space Complexity: O(1)
|
|
670
|
+
*
|
|
671
|
+
* The `pollLast()` function removes and returns the value of the last node in a doubly linked list.
|
|
672
|
+
* @returns The method is returning the value of the removed node (removedNode.value) if the list is not empty. If the
|
|
673
|
+
* list is empty, it returns undefined.
|
|
674
|
+
*/
|
|
675
|
+
pollLast() {
|
|
676
|
+
return this.pop();
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Time Complexity: O(1)
|
|
680
|
+
* Space Complexity: O(1)
|
|
681
|
+
*/
|
|
682
|
+
/**
|
|
683
|
+
* Time Complexity: O(1)
|
|
684
|
+
* Space Complexity: O(1)
|
|
685
|
+
*
|
|
686
|
+
* The `pollFirst()` function removes and returns the value of the first node in a doubly linked list.
|
|
687
|
+
* @returns The method `shift()` returns the value of the node that is removed from the beginning of the doubly linked
|
|
688
|
+
* list.
|
|
689
|
+
*/
|
|
690
|
+
pollFirst() {
|
|
691
|
+
return this.shift();
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* Time Complexity: O(1)
|
|
695
|
+
* Space Complexity: O(1)
|
|
696
|
+
*/
|
|
697
|
+
/**
|
|
698
|
+
* Time Complexity: O(1)
|
|
699
|
+
* Space Complexity: O(1)
|
|
700
|
+
*
|
|
701
|
+
* The addFirst function adds a new node with the given value to the beginning of a doubly linked list.
|
|
702
|
+
* @param {E} value - The `value` parameter represents the value of the new node that will be added to the beginning of the
|
|
703
|
+
* doubly linked list.
|
|
704
|
+
*/
|
|
705
|
+
addFirst(value) {
|
|
706
|
+
this.unshift(value);
|
|
707
|
+
}
|
|
732
708
|
/**
|
|
733
709
|
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
734
|
-
* Space Complexity: O(
|
|
710
|
+
* Space Complexity: O(1)
|
|
735
711
|
*/
|
|
736
|
-
|
|
737
|
-
|
|
712
|
+
/**
|
|
713
|
+
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
714
|
+
* Space Complexity: O(1)
|
|
715
|
+
*
|
|
716
|
+
* The `get first` function returns the first node in a doubly linked list, or undefined if the list is empty.
|
|
717
|
+
* @returns The method `get first()` returns the first node of the doubly linked list, or `undefined` if the list is empty.
|
|
718
|
+
*/
|
|
719
|
+
get first() {
|
|
720
|
+
return this.head?.value;
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
724
|
+
* Space Complexity: O(1)
|
|
725
|
+
*/
|
|
726
|
+
/**
|
|
727
|
+
* Time Complexity: O(n), where n is the number of elements in the linked list.
|
|
728
|
+
* Space Complexity: O(1)
|
|
729
|
+
*
|
|
730
|
+
* The `get last` function returns the last node in a doubly linked list, or undefined if the list is empty.
|
|
731
|
+
* @returns The method `get last()` returns the last node of the doubly linked list, or `undefined` if the list is empty.
|
|
732
|
+
*/
|
|
733
|
+
get last() {
|
|
734
|
+
return this.tail?.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
|
|
30
|
-
get
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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
|
|
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 `
|
|
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
|
-
|
|
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():
|
|
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 `
|
|
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 `
|
|
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
|
-
|
|
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 `
|
|
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
|
-
|
|
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
|
}
|