```typescript
export class LruCache<K, V> {
  private capacity: number;
  private cache: Map<K, { value: V; timestamp: number }>;
  private head: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next: { key: K | null; prev: { key: K | null; next