declare class Node<T = any> {
    value: T;
    next: Node<T> | null;
    prev: Node<T> | null;
    constructor(value: T);
}
export declare class DoublyLinkedList<T = any> {
    private _head;
    private _tail;
    private _length;
    constructor();
    get head(): Node<T> | null;
    get tail(): Node<T> | null;
    get length(): number;
    get(index: number): T | undefined;
    getNode(index: number): Node<T> | undefined;
    find(predicate: (value: T) => unknown): T | undefined;
    findNode(predicate: (value: T) => unknown): Node<T> | undefined;
    insert(value: T, index?: number): Node<T>;
    insertAfter(value: T, node: Node<T>): Node<T>;
    insertBefore(value: T, node: Node<T>): Node<T>;
    removeAtIndex(index: number): void;
    removeWithValue(predicate: (value: T) => unknown): void;
    removeNode(node: Node<T> | null | undefined): void;
    forEach(callbackfn: (value: T) => void): void;
    private setHead;
    private setTail;
}
export {};
