题目
思路
为了让put操作达到O(1), 采用链表实现,这样在表头插入新节点仅需有限次操作, 无需向数组一样花费O(N)去向后搬移数组元素;为了让get操作达到O(1), 采用哈希表存储key值到链表节点的映射关系,C++ STL中的unordered_map是采用哈希实现的;为降低链表的维护难度,首尾各放置一个空节点;
题解
class XListNode {
public:
int key, value;
XListNode *prev, *next;
XListNode(int ik = 0, int iv = 0) {
key = ik;
value = iv;
prev = NULL;
next = NULL;
}
void pick() {
if (prev)
prev->next = next;
if (next)
next->prev = prev;
prev = NULL;
next = NULL;
}
void insertAfter(XListNode *node) {
if (!node) return;
prev = node;
next = node->next;
prev->next = this;
next->prev = this;
}
};