priority-queue-typed 1.53.4 → 1.53.6
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/README.md +5 -9
- package/dist/data-structures/linked-list/doubly-linked-list.d.ts +163 -76
- package/dist/data-structures/linked-list/doubly-linked-list.js +211 -104
- package/dist/data-structures/linked-list/singly-linked-list.d.ts +144 -62
- package/dist/data-structures/linked-list/singly-linked-list.js +201 -97
- package/package.json +2 -2
- package/src/data-structures/linked-list/doubly-linked-list.ts +232 -105
- package/src/data-structures/linked-list/singly-linked-list.ts +219 -98
|
@@ -404,19 +404,19 @@ exports.DoublyLinkedListNode = DoublyLinkedListNode;
|
|
|
404
404
|
* // Test different scenarios of lyric synchronization
|
|
405
405
|
*
|
|
406
406
|
* // 1. Find lyric at exact timestamp
|
|
407
|
-
* const exactTimeLyric = lyricsList.
|
|
407
|
+
* const exactTimeLyric = lyricsList.getBackward(lyric => lyric.value.time <= 36000);
|
|
408
408
|
* console.log(exactTimeLyric?.text); // 'And ignite your bones'
|
|
409
409
|
*
|
|
410
410
|
* // 2. Find lyric between timestamps
|
|
411
|
-
* const betweenTimeLyric = lyricsList.
|
|
411
|
+
* const betweenTimeLyric = lyricsList.getBackward(lyric => lyric.value.time <= 22000);
|
|
412
412
|
* console.log(betweenTimeLyric?.text); // "When you lose something you can't replace"
|
|
413
413
|
*
|
|
414
414
|
* // 3. Find first lyric when timestamp is less than first entry
|
|
415
|
-
* const earlyTimeLyric = lyricsList.
|
|
415
|
+
* const earlyTimeLyric = lyricsList.getBackward(lyric => lyric.value.time <= -1000);
|
|
416
416
|
* console.log(earlyTimeLyric); // undefined
|
|
417
417
|
*
|
|
418
418
|
* // 4. Find last lyric when timestamp is after last entry
|
|
419
|
-
* const lateTimeLyric = lyricsList.
|
|
419
|
+
* const lateTimeLyric = lyricsList.getBackward(lyric => lyric.value.time <= 50000);
|
|
420
420
|
* console.log(lateTimeLyric?.text); // 'And I will try to fix you'
|
|
421
421
|
* @example
|
|
422
422
|
* // cpu process schedules
|
|
@@ -556,28 +556,33 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
556
556
|
return (_a = this.tail) === null || _a === void 0 ? void 0 : _a.value;
|
|
557
557
|
}
|
|
558
558
|
/**
|
|
559
|
-
* Time Complexity: O(
|
|
560
|
-
* Space Complexity: O(
|
|
559
|
+
* Time Complexity: O(1)
|
|
560
|
+
* Space Complexity: O(1)
|
|
561
561
|
*
|
|
562
|
-
* The `
|
|
563
|
-
*
|
|
564
|
-
* @param {E
|
|
565
|
-
*
|
|
562
|
+
* The function `isNode` in TypeScript checks if a given input is an instance of
|
|
563
|
+
* `DoublyLinkedListNode`.
|
|
564
|
+
* @param {E | DoublyLinkedListNode<E> | ((node: DoublyLinkedListNode<E>) => boolean)} elementNodeOrPredicate
|
|
565
|
+
* elementNodeOrPredicate - The `elementNodeOrPredicate` parameter in the `isNode` function can
|
|
566
|
+
* be one of the following types:
|
|
567
|
+
* @returns The `isNode` function is checking if the `elementNodeOrPredicate` parameter is an
|
|
568
|
+
* instance of `DoublyLinkedListNode<E>`. If it is, the function returns `true`, indicating that the
|
|
569
|
+
* parameter is a `DoublyLinkedListNode<E>`. If it is not an instance of `DoublyLinkedListNode<E>`,
|
|
570
|
+
* the function returns `false`.
|
|
566
571
|
*/
|
|
567
|
-
|
|
568
|
-
return
|
|
572
|
+
isNode(elementNodeOrPredicate) {
|
|
573
|
+
return elementNodeOrPredicate instanceof DoublyLinkedListNode;
|
|
569
574
|
}
|
|
570
575
|
/**
|
|
571
576
|
* Time Complexity: O(1)
|
|
572
577
|
* Space Complexity: O(1)
|
|
573
578
|
*
|
|
574
|
-
* The push function adds a new element to the end of a doubly linked list.
|
|
575
|
-
* @param {E}
|
|
576
|
-
*
|
|
577
|
-
* @returns The `push` method is returning a boolean value, `true`.
|
|
579
|
+
* The `push` function adds a new element or node to the end of a doubly linked list.
|
|
580
|
+
* @param {E | DoublyLinkedListNode<E>} elementOrNode - The `elementOrNode` parameter in the `push`
|
|
581
|
+
* method can accept either an element of type `E` or a `DoublyLinkedListNode<E>` object.
|
|
582
|
+
* @returns The `push` method is returning a boolean value, specifically `true`.
|
|
578
583
|
*/
|
|
579
|
-
push(
|
|
580
|
-
const newNode =
|
|
584
|
+
push(elementOrNode) {
|
|
585
|
+
const newNode = this._ensureNode(elementOrNode);
|
|
581
586
|
if (!this.head) {
|
|
582
587
|
this._head = newNode;
|
|
583
588
|
this._tail = newNode;
|
|
@@ -638,13 +643,14 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
638
643
|
* Time Complexity: O(1)
|
|
639
644
|
* Space Complexity: O(1)
|
|
640
645
|
*
|
|
641
|
-
* The unshift function adds a new element to the beginning of a doubly linked list.
|
|
642
|
-
* @param {E}
|
|
643
|
-
*
|
|
644
|
-
*
|
|
646
|
+
* The unshift function adds a new element or node to the beginning of a doubly linked list.
|
|
647
|
+
* @param {E | DoublyLinkedListNode<E>} elementOrNode - The `elementOrNode` parameter in the
|
|
648
|
+
* `unshift` method can be either an element of type `E` or a `DoublyLinkedListNode` containing an
|
|
649
|
+
* element of type `E`.
|
|
650
|
+
* @returns The `unshift` method is returning a boolean value, specifically `true`.
|
|
645
651
|
*/
|
|
646
|
-
unshift(
|
|
647
|
-
const newNode =
|
|
652
|
+
unshift(elementOrNode) {
|
|
653
|
+
const newNode = this._ensureNode(elementOrNode);
|
|
648
654
|
if (!this.head) {
|
|
649
655
|
this._head = newNode;
|
|
650
656
|
this._tail = newNode;
|
|
@@ -700,16 +706,27 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
700
706
|
* Time Complexity: O(n)
|
|
701
707
|
* Space Complexity: O(1)
|
|
702
708
|
*
|
|
703
|
-
*
|
|
704
|
-
*
|
|
705
|
-
* @param {E
|
|
706
|
-
*
|
|
707
|
-
*
|
|
709
|
+
* This TypeScript function searches for a node in a doubly linked list based on a given element node
|
|
710
|
+
* or predicate.
|
|
711
|
+
* @param {| E
|
|
712
|
+
* | DoublyLinkedListNode<E>
|
|
713
|
+
* | ((node: DoublyLinkedListNode<E>) => boolean)
|
|
714
|
+
* | undefined} elementNodeOrPredicate - The `getNode` method you provided is used to find a
|
|
715
|
+
* node in a doubly linked list based on a given element, node, or predicate function. The
|
|
716
|
+
* `elementNodeOrPredicate` parameter can be one of the following:
|
|
717
|
+
* @returns The `getNode` method returns a `DoublyLinkedListNode<E>` or `undefined` based on the
|
|
718
|
+
* input `elementNodeOrPredicate`. If the input is `undefined`, the method returns `undefined`.
|
|
719
|
+
* Otherwise, it iterates through the linked list starting from the head node and applies the
|
|
720
|
+
* provided predicate function to each node. If a node satisfies the predicate, that node is
|
|
721
|
+
* returned. If
|
|
708
722
|
*/
|
|
709
|
-
getNode(
|
|
723
|
+
getNode(elementNodeOrPredicate) {
|
|
724
|
+
if (elementNodeOrPredicate === undefined)
|
|
725
|
+
return;
|
|
726
|
+
const predicate = this._ensurePredicate(elementNodeOrPredicate);
|
|
710
727
|
let current = this.head;
|
|
711
728
|
while (current) {
|
|
712
|
-
if (current
|
|
729
|
+
if (predicate(current)) {
|
|
713
730
|
return current;
|
|
714
731
|
}
|
|
715
732
|
current = current.next;
|
|
@@ -720,26 +737,28 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
720
737
|
* Time Complexity: O(n)
|
|
721
738
|
* Space Complexity: O(1)
|
|
722
739
|
*
|
|
723
|
-
* The `
|
|
724
|
-
* @param {number} index - The index parameter
|
|
725
|
-
*
|
|
726
|
-
*
|
|
727
|
-
*
|
|
728
|
-
*
|
|
729
|
-
* if the
|
|
740
|
+
* The `addAt` function inserts a new element or node at a specified index in a doubly linked list.
|
|
741
|
+
* @param {number} index - The `index` parameter in the `addAt` method represents the position at
|
|
742
|
+
* which you want to add a new element or node in the doubly linked list. It indicates the location
|
|
743
|
+
* where the new element or node should be inserted.
|
|
744
|
+
* @param {E | DoublyLinkedListNode<E>} newElementOrNode - The `newElementOrNode` parameter in the
|
|
745
|
+
* `addAt` method can be either a value of type `E` or a `DoublyLinkedListNode<E>` object.
|
|
746
|
+
* @returns The `addAt` method returns a boolean value. It returns `true` if the element or node was
|
|
747
|
+
* successfully added at the specified index, and `false` if the index is out of bounds (less than 0
|
|
748
|
+
* or greater than the size of the list).
|
|
730
749
|
*/
|
|
731
|
-
addAt(index,
|
|
750
|
+
addAt(index, newElementOrNode) {
|
|
732
751
|
if (index < 0 || index > this._size)
|
|
733
752
|
return false;
|
|
734
753
|
if (index === 0) {
|
|
735
|
-
this.unshift(
|
|
754
|
+
this.unshift(newElementOrNode);
|
|
736
755
|
return true;
|
|
737
756
|
}
|
|
738
757
|
if (index === this._size) {
|
|
739
|
-
this.push(
|
|
758
|
+
this.push(newElementOrNode);
|
|
740
759
|
return true;
|
|
741
760
|
}
|
|
742
|
-
const newNode =
|
|
761
|
+
const newNode = this._ensureNode(newElementOrNode);
|
|
743
762
|
const prevNode = this.getNodeAt(index - 1);
|
|
744
763
|
const nextNode = prevNode.next;
|
|
745
764
|
newNode.prev = prevNode;
|
|
@@ -753,25 +772,21 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
753
772
|
* Time Complexity: O(1) or O(n)
|
|
754
773
|
* Space Complexity: O(1)
|
|
755
774
|
*
|
|
756
|
-
* The `addBefore` function
|
|
757
|
-
*
|
|
758
|
-
*
|
|
759
|
-
*
|
|
760
|
-
* @param {E}
|
|
761
|
-
*
|
|
762
|
-
*
|
|
763
|
-
*
|
|
775
|
+
* The `addBefore` function in TypeScript adds a new element or node before an existing element or
|
|
776
|
+
* node in a doubly linked list.
|
|
777
|
+
* @param {E | DoublyLinkedListNode<E>} existingElementOrNode - The `existingElementOrNode` parameter
|
|
778
|
+
* in the `addBefore` method can be either an element of type `E` or a `DoublyLinkedListNode<E>`.
|
|
779
|
+
* @param {E | DoublyLinkedListNode<E>} newElementOrNode - The `newElementOrNode` parameter
|
|
780
|
+
* represents the element or node that you want to add before the `existingElementOrNode` in a doubly
|
|
781
|
+
* linked list.
|
|
782
|
+
* @returns The `addBefore` method returns a boolean value - `true` if the new element or node was
|
|
783
|
+
* successfully added before the existing element or node, and `false` if the existing element or
|
|
784
|
+
* node was not found.
|
|
764
785
|
*/
|
|
765
|
-
addBefore(
|
|
766
|
-
|
|
767
|
-
if (existingValueOrNode instanceof DoublyLinkedListNode) {
|
|
768
|
-
existingNode = existingValueOrNode;
|
|
769
|
-
}
|
|
770
|
-
else {
|
|
771
|
-
existingNode = this.getNode(existingValueOrNode);
|
|
772
|
-
}
|
|
786
|
+
addBefore(existingElementOrNode, newElementOrNode) {
|
|
787
|
+
const existingNode = this.getNode(existingElementOrNode);
|
|
773
788
|
if (existingNode) {
|
|
774
|
-
const newNode =
|
|
789
|
+
const newNode = this._ensureNode(newElementOrNode);
|
|
775
790
|
newNode.prev = existingNode.prev;
|
|
776
791
|
if (existingNode.prev) {
|
|
777
792
|
existingNode.prev.next = newNode;
|
|
@@ -790,24 +805,22 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
790
805
|
* Time Complexity: O(1) or O(n)
|
|
791
806
|
* Space Complexity: O(1)
|
|
792
807
|
*
|
|
793
|
-
* The `addAfter` function
|
|
794
|
-
*
|
|
795
|
-
*
|
|
796
|
-
*
|
|
797
|
-
* @param {E}
|
|
798
|
-
*
|
|
799
|
-
*
|
|
808
|
+
* The `addAfter` function in TypeScript adds a new element or node after an existing element or node
|
|
809
|
+
* in a doubly linked list.
|
|
810
|
+
* @param {E | DoublyLinkedListNode<E>} existingElementOrNode - existingElementOrNode represents the
|
|
811
|
+
* element or node in the doubly linked list after which you want to add a new element or node.
|
|
812
|
+
* @param {E | DoublyLinkedListNode<E>} newElementOrNode - The `newElementOrNode` parameter in the
|
|
813
|
+
* `addAfter` method represents the element or node that you want to add after the existing element
|
|
814
|
+
* or node in a doubly linked list. This parameter can be either an element value or a
|
|
815
|
+
* `DoublyLinkedListNode` object that you want to insert
|
|
816
|
+
* @returns The `addAfter` method returns a boolean value - `true` if the new element or node was
|
|
817
|
+
* successfully added after the existing element or node, and `false` if the existing element or node
|
|
818
|
+
* was not found in the linked list.
|
|
800
819
|
*/
|
|
801
|
-
addAfter(
|
|
802
|
-
|
|
803
|
-
if (existingValueOrNode instanceof DoublyLinkedListNode) {
|
|
804
|
-
existingNode = existingValueOrNode;
|
|
805
|
-
}
|
|
806
|
-
else {
|
|
807
|
-
existingNode = this.getNode(existingValueOrNode);
|
|
808
|
-
}
|
|
820
|
+
addAfter(existingElementOrNode, newElementOrNode) {
|
|
821
|
+
const existingNode = this.getNode(existingElementOrNode);
|
|
809
822
|
if (existingNode) {
|
|
810
|
-
const newNode =
|
|
823
|
+
const newNode = this._ensureNode(newElementOrNode);
|
|
811
824
|
newNode.next = existingNode.next;
|
|
812
825
|
if (existingNode.next) {
|
|
813
826
|
existingNode.next.prev = newNode;
|
|
@@ -855,20 +868,17 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
855
868
|
* Time Complexity: O(1) or O(n)
|
|
856
869
|
* Space Complexity: O(1)
|
|
857
870
|
*
|
|
858
|
-
* The `delete` function removes a node from a doubly linked list
|
|
859
|
-
* @param {E | DoublyLinkedListNode<E>}
|
|
860
|
-
* a `DoublyLinkedListNode
|
|
861
|
-
*
|
|
862
|
-
*
|
|
871
|
+
* The `delete` function removes a specified element or node from a doubly linked list if it exists.
|
|
872
|
+
* @param {E | DoublyLinkedListNode<E> | undefined} elementOrNode - The `elementOrNode` parameter in
|
|
873
|
+
* the `delete` method can accept an element of type `E`, a `DoublyLinkedListNode` of type `E`, or it
|
|
874
|
+
* can be `undefined`. This parameter is used to identify the node that needs to be deleted from the
|
|
875
|
+
* doubly linked list
|
|
876
|
+
* @returns The `delete` method returns a boolean value - `true` if the element or node was
|
|
877
|
+
* successfully deleted from the doubly linked list, and `false` if the element or node was not found
|
|
878
|
+
* in the list.
|
|
863
879
|
*/
|
|
864
|
-
delete(
|
|
865
|
-
|
|
866
|
-
if (valOrNode instanceof DoublyLinkedListNode) {
|
|
867
|
-
node = valOrNode;
|
|
868
|
-
}
|
|
869
|
-
else {
|
|
870
|
-
node = this.getNode(valOrNode);
|
|
871
|
-
}
|
|
880
|
+
delete(elementOrNode) {
|
|
881
|
+
const node = this.getNode(elementOrNode);
|
|
872
882
|
if (node) {
|
|
873
883
|
if (node === this.head) {
|
|
874
884
|
this.shift();
|
|
@@ -914,17 +924,19 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
914
924
|
* Time Complexity: O(n)
|
|
915
925
|
* Space Complexity: O(1)
|
|
916
926
|
*
|
|
917
|
-
*
|
|
918
|
-
* @param {E
|
|
919
|
-
*
|
|
920
|
-
*
|
|
921
|
-
*
|
|
927
|
+
* This function finds the index of a specified element, node, or predicate in a doubly linked list.
|
|
928
|
+
* @param {E | DoublyLinkedListNode<E> | ((node: DoublyLinkedListNode<E>) => boolean)} elementNodeOrPredicate
|
|
929
|
+
* elementNodeOrPredicate - The `indexOf` method takes in a parameter `elementNodeOrPredicate`, which
|
|
930
|
+
* can be one of the following:
|
|
931
|
+
* @returns The `indexOf` method returns the index of the element in the doubly linked list that
|
|
932
|
+
* matches the provided element, node, or predicate. If no match is found, it returns -1.
|
|
922
933
|
*/
|
|
923
|
-
indexOf(
|
|
934
|
+
indexOf(elementNodeOrPredicate) {
|
|
935
|
+
const predicate = this._ensurePredicate(elementNodeOrPredicate);
|
|
924
936
|
let index = 0;
|
|
925
937
|
let current = this.head;
|
|
926
938
|
while (current) {
|
|
927
|
-
if (current
|
|
939
|
+
if (predicate(current)) {
|
|
928
940
|
return index;
|
|
929
941
|
}
|
|
930
942
|
index++;
|
|
@@ -936,19 +948,43 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
936
948
|
* Time Complexity: O(n)
|
|
937
949
|
* Space Complexity: O(1)
|
|
938
950
|
*
|
|
939
|
-
*
|
|
940
|
-
*
|
|
941
|
-
* @param
|
|
942
|
-
*
|
|
943
|
-
*
|
|
944
|
-
*
|
|
951
|
+
* This function retrieves an element from a doubly linked list based on a given element
|
|
952
|
+
* node or predicate.
|
|
953
|
+
* @param {E | DoublyLinkedListNode<E> | ((node: DoublyLinkedListNode<E>) => boolean)} elementNodeOrPredicate
|
|
954
|
+
* elementNodeOrPredicate - The `get` method takes in a parameter called `elementNodeOrPredicate`,
|
|
955
|
+
* which can be one of the following types:
|
|
956
|
+
* @returns The `get` method returns the value of the first node in the doubly linked list that
|
|
957
|
+
* satisfies the provided predicate function. If no such node is found, it returns `undefined`.
|
|
958
|
+
*/
|
|
959
|
+
get(elementNodeOrPredicate) {
|
|
960
|
+
const predicate = this._ensurePredicate(elementNodeOrPredicate);
|
|
961
|
+
let current = this.head;
|
|
962
|
+
while (current) {
|
|
963
|
+
if (predicate(current))
|
|
964
|
+
return current.value;
|
|
965
|
+
current = current.next;
|
|
966
|
+
}
|
|
967
|
+
return undefined;
|
|
968
|
+
}
|
|
969
|
+
/**
|
|
970
|
+
* Time Complexity: O(n)
|
|
971
|
+
* Space Complexity: O(1)
|
|
972
|
+
*
|
|
973
|
+
* The `getBackward` function searches for a specific element in a doubly linked list starting from
|
|
974
|
+
* the tail and moving backwards.
|
|
975
|
+
* @param {E | DoublyLinkedListNode<E> | ((node: DoublyLinkedListNode<E>) => boolean)} elementNodeOrPredicate
|
|
976
|
+
* elementNodeOrPredicate - The `elementNodeOrPredicate` parameter in the `getBackward`
|
|
977
|
+
* function can be one of the following types:
|
|
978
|
+
* @returns The `getBackward` method returns the value of the element node that matches the provided
|
|
979
|
+
* predicate when traversing the doubly linked list backwards. If no matching element is found, it
|
|
980
|
+
* returns `undefined`.
|
|
945
981
|
*/
|
|
946
|
-
|
|
982
|
+
getBackward(elementNodeOrPredicate) {
|
|
983
|
+
const predicate = this._ensurePredicate(elementNodeOrPredicate);
|
|
947
984
|
let current = this.tail;
|
|
948
985
|
while (current) {
|
|
949
|
-
if (
|
|
986
|
+
if (predicate(current))
|
|
950
987
|
return current.value;
|
|
951
|
-
}
|
|
952
988
|
current = current.prev;
|
|
953
989
|
}
|
|
954
990
|
return undefined;
|
|
@@ -1070,6 +1106,35 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
1070
1106
|
}
|
|
1071
1107
|
return mappedList;
|
|
1072
1108
|
}
|
|
1109
|
+
/**
|
|
1110
|
+
* Time Complexity: O(n)
|
|
1111
|
+
* Space Complexity: O(1)
|
|
1112
|
+
*
|
|
1113
|
+
*/
|
|
1114
|
+
countOccurrences(elementOrNode) {
|
|
1115
|
+
const predicate = this._ensurePredicate(elementOrNode);
|
|
1116
|
+
let count = 0;
|
|
1117
|
+
let current = this.head;
|
|
1118
|
+
while (current) {
|
|
1119
|
+
if (predicate(current)) {
|
|
1120
|
+
count++;
|
|
1121
|
+
}
|
|
1122
|
+
current = current.next;
|
|
1123
|
+
}
|
|
1124
|
+
return count;
|
|
1125
|
+
}
|
|
1126
|
+
/**
|
|
1127
|
+
* Time Complexity: O(n)
|
|
1128
|
+
* Space Complexity: O(n)
|
|
1129
|
+
*
|
|
1130
|
+
* The `fromArray` function creates a new instance of a DoublyLinkedList and populates it with the elements from the
|
|
1131
|
+
* given array.
|
|
1132
|
+
* @param {E[]} data - The `data` parameter is an array of elements of type `E`.
|
|
1133
|
+
* @returns The `fromArray` function returns a DoublyLinkedList object.
|
|
1134
|
+
*/
|
|
1135
|
+
static fromArray(data) {
|
|
1136
|
+
return new DoublyLinkedList(data);
|
|
1137
|
+
}
|
|
1073
1138
|
/**
|
|
1074
1139
|
* The function returns an iterator that iterates over the values of a linked list.
|
|
1075
1140
|
*/
|
|
@@ -1080,5 +1145,47 @@ class DoublyLinkedList extends base_1.IterableElementBase {
|
|
|
1080
1145
|
current = current.next;
|
|
1081
1146
|
}
|
|
1082
1147
|
}
|
|
1148
|
+
/**
|
|
1149
|
+
* The function `_isPredicate` checks if the input is a function that takes a `DoublyLinkedListNode`
|
|
1150
|
+
* as an argument and returns a boolean.
|
|
1151
|
+
* @param {E | DoublyLinkedListNode<E> | ((node: DoublyLinkedListNode<E>) => boolean)} elementNodeOrPredicate
|
|
1152
|
+
* elementNodeOrPredicate - The `elementNodeOrPredicate` parameter can be one of the following
|
|
1153
|
+
* types:
|
|
1154
|
+
* @returns The _isPredicate method is returning a boolean value indicating whether the
|
|
1155
|
+
* elementNodeOrPredicate parameter is a function or not. If the elementNodeOrPredicate is a
|
|
1156
|
+
* function, the method will return true, indicating that it is a predicate function.
|
|
1157
|
+
*/
|
|
1158
|
+
_isPredicate(elementNodeOrPredicate) {
|
|
1159
|
+
return typeof elementNodeOrPredicate === 'function';
|
|
1160
|
+
}
|
|
1161
|
+
/**
|
|
1162
|
+
* The function `_ensureNode` ensures that the input is a valid node in a doubly linked list.
|
|
1163
|
+
* @param {E | DoublyLinkedListNode<E>} elementOrNode - The `elementOrNode` parameter can be either
|
|
1164
|
+
* an element of type `E` or a `DoublyLinkedListNode` containing an element of type `E`.
|
|
1165
|
+
* @returns If the `elementOrNode` parameter is already a `DoublyLinkedListNode`, it will be returned
|
|
1166
|
+
* as is. Otherwise, a new `DoublyLinkedListNode` instance will be created with the `elementOrNode`
|
|
1167
|
+
* value and returned.
|
|
1168
|
+
*/
|
|
1169
|
+
_ensureNode(elementOrNode) {
|
|
1170
|
+
if (this.isNode(elementOrNode))
|
|
1171
|
+
return elementOrNode;
|
|
1172
|
+
return new DoublyLinkedListNode(elementOrNode);
|
|
1173
|
+
}
|
|
1174
|
+
/**
|
|
1175
|
+
* The function `_ensurePredicate` in TypeScript ensures that the input is either a node, a predicate
|
|
1176
|
+
* function, or a value to compare with the node's value.
|
|
1177
|
+
* @param {E | DoublyLinkedListNode<E> | ((node: DoublyLinkedListNode<E>) => boolean)} elementNodeOrPredicate
|
|
1178
|
+
* elementNodeOrPredicate - The `elementNodeOrPredicate` parameter can be one of the following
|
|
1179
|
+
* types:
|
|
1180
|
+
* @returns A function is being returned that takes a `DoublyLinkedListNode` as a parameter and
|
|
1181
|
+
* returns a boolean value based on the conditions specified in the code.
|
|
1182
|
+
*/
|
|
1183
|
+
_ensurePredicate(elementNodeOrPredicate) {
|
|
1184
|
+
if (this.isNode(elementNodeOrPredicate))
|
|
1185
|
+
return (node) => node === elementNodeOrPredicate;
|
|
1186
|
+
if (this._isPredicate(elementNodeOrPredicate))
|
|
1187
|
+
return elementNodeOrPredicate;
|
|
1188
|
+
return (node) => node.value === elementNodeOrPredicate;
|
|
1189
|
+
}
|
|
1083
1190
|
}
|
|
1084
1191
|
exports.DoublyLinkedList = DoublyLinkedList;
|