核心结论
复杂度稳定的 LRU 缓存应让读取、写入、更新使用顺序和淘汰均保持均摊 O(1)。经典方案是 Map 加双向链表:Map 从键直接定位节点,双向链表维护最近使用顺序。链表头部表示最近使用,尾部表示最久未使用;命中或更新时把节点移动到头部,超出容量时从尾部淘汰。仅用数组维护顺序会使查询、删除或移动退化为 O(n)。
可运行实现
class ListNode {
constructor(key, value) {
this.key = key;
this.value = value;
this.prev = null;
t