declare type Point = { x: number; y: number; }; declare type ListNode = { value: T; next?: ListNode; prev?: ListNode; }; declare interface List { get length(): number; removeAt(index: number): T | undefined; remove(item: T): T | undefined; get(index: number): T | undefined; prepend(item: T): void; append(item: T): void; insertAt(item: T, idx: number): void; } declare type CompleteGraphEdge = { from: number; to: number; weight: number }; declare type GraphEdge = { to: number; weight: number }; declare type WeightedAdjacencyList = GraphEdge[][]; // A number means weight declare type WeightedAdjacencyMatrix = number[][]; declare type AdjacencyList = number[][]; // A 1 means connected declare type AdjacencyMatrix = number[][]; declare type BinaryNode = { value: T; left: BinaryNode | null; right: BinaryNode | null; }; declare type GeneralNode = { value: T; children: GeneralNode[]; }; declare interface ILRU { update(key: K, value: V): void; get(key: K): V | undefined; }