Leetcode 146

我写的代码依然比较丑陋,只需要记住实现以下东西:

>>> 链表节点 struct Node{...},包含 int key, int value, Node* next, Node *pred。

>>> 双向链表 Node *head, *tail,链表的描述信息 int size, int capacity

>>> 哈希表 map<int, Node*> hashTable

 

为了保证代码整洁,我实现了两个方法:Node* addToTail(int k, int v) 和 void moveToTail(Node* node)。

 

接下来的策略:

>>> 如果是 get,那么检查 hashTable 中是否有key(auto iter = hashTable.find(key); iter == hashTable.end()?),有则moveToTail(iter->second); return tail->val,否则 return -1。

>>> 如果是 put,那么在链表 size < capacity 时,直接 auto node = addToTail(key, value); hashTable[key] = node。不然,则看 key 是否在 hashTable 中。

>>>>>> 如果是,直接 moveToTail 并更新值。

>>>>>> 否则,moveToTail(head) 并更新 head 的内容,再更新 hashTable 中的内容。

 

 

Node* addToTail(int k, int v) 

posted on 2020-09-18 15:46  Ricochet!  阅读(158)  评论(0编辑  收藏  举报