import { Nullable } from '@thermopylae/core.declarations';
import { LinkedList } from './interface';
/**
 * @private
 */
declare const NEXT_SYM: unique symbol;
/**
 * @private
 */
interface SingleLinkedListNode<Node> {
    [NEXT_SYM]: Nullable<Node>;
}
/**
 * @private
 */
declare class SingleLinkedListIterator<Node extends SingleLinkedListNode<Node>> implements Iterator<Node, Node> {
    private node;
    constructor(node: Nullable<Node>);
    next(): IteratorResult<Node, Node>;
}
/**
 * @private
 */
declare class SingleLinkedList<Node extends SingleLinkedListNode<Node>> implements LinkedList<SingleLinkedListNode<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;
    [Symbol.iterator](): Iterator<SingleLinkedListNode<Node>>;
    empty(): boolean;
    clear(): void;
}
export { SingleLinkedList, SingleLinkedListNode, SingleLinkedListIterator, NEXT_SYM };
