-// Copyright Jerome Benoit. 2023. All Rights Reserved.
+// Copyright Jerome Benoit. 2023-2024. All Rights Reserved.
/**
- * Linked list node.
+ * Linked list node interface.
*
* @typeParam T - Type of linked list node data.
* @internal
*/
-export class LinkedListNode<T> {
- public data: T
- public next?: LinkedListNode<T>
- public prev?: LinkedListNode<T>
-
- public constructor (data: T) {
- this.data = data
- }
+export interface ILinkedListNode<T> {
+ data: T
+ next?: ILinkedListNode<T>
+ prev?: ILinkedListNode<T>
}
/**
* @internal
*/
export class Deque<T> {
- private head?: LinkedListNode<T>
- private tail?: LinkedListNode<T>
+ private head?: ILinkedListNode<T>
+ private tail?: ILinkedListNode<T>
/** The size of the deque. */
public size!: number
/** The maximum size of the deque. */
* Appends data to the deque.
*
* @param data - Data to append.
- * @returns The new size of the queue.
+ * @returns The new size of the deque.
*/
public push (data: T): number {
- const node = new LinkedListNode(data)
+ const node: ILinkedListNode<T> = { data }
if (this.tail == null) {
this.head = this.tail = node
} else {
* Prepends data to the deque.
*
* @param data - Data to prepend.
- * @returns The new size of the queue.
+ * @returns The new size of the deque.
*/
public unshift (data: T): number {
- const node = new LinkedListNode(data)
+ const node: ILinkedListNode<T> = { data }
if (this.head == null) {
this.head = this.tail = node
} else {