import { Nullable } from '@thermopylae/core.declarations';
import { LinkedList } from './interface';
/**
 * @private
 */
declare const PREV_SYM: unique symbol;
/**
 * @private
 */
declare const NEXT_SYM: unique symbol;
/**
 * @private
 */
interface DoublyLinkedListNode<Node> {
    [PREV_SYM]: Nullable<Node>;
    [NEXT_SYM]: Nullable<Node>;
}
/**
 * @private
 */
declare class DoublyLinkedListIterator<Node extends DoublyLinkedListNode<Node>> implements Iterator<Node, Node> {
    private node;
    constructor(node: Nullable<Node>);
    next(): IteratorResult<Node, Node>;
}
/**
 * @private
 */
declare class DoublyLinkedList<Node extends DoublyLinkedListNode<Node>> implements LinkedList<DoublyLinkedListNode<Node>> {
    head: Nullable<Node>;
    tail: Nullable<Node>;
    size: number;
    constructor(startNode?: Nullable<Node>);
    unshift(node: Node): void;
    push(node: Node): void;
    insertAfter(prevNode: Node, newNode: Node): void;
    remove(node: Node): void;
    toFront(node: Node): void;
    toTail(node: Node): void;
    [Symbol.iterator](): Iterator<Node>;
    empty(): boolean;
    clear(): void;
}
export { DoublyLinkedList, DoublyLinkedListNode, DoublyLinkedListIterator, NEXT_SYM, PREV_SYM };
