今天我翻了翻自己之前的博客,然后对想回顾一下自己LRU算法,附上链接:
https://blog.csdn.net/qq_42627977/article/details/119045646#comments_17685616
附上需要优化代码:
//获取元素
public int get(int key) {
//从map中获取元素
DLinkedNode node = map.get(key);
if(node == null) return -1;
//获取到元素以后,该元素刚刚使用,所以将该节点移动到头部
moveToHead(node);
return node.value;
}
我之前是用HashMap保存了key为查找元素,vlaue为链表的node节点,当链表节点被删除时,我们应该将HashMap中的元素删除,附上代码:
//获取元素
public int get(int key) {
//从map中获取元素
DLinkedNode node = map.get(key);
if(node == null) {
//我们应该把HashMap中的元素删除
map.remove(key);
return -1;
}
//获取到元素以后,该元素刚刚使用,所以将该节点移动到头部
moveToHead(node);
return node.value;
}
为了验证是否正确,我重新在leetcode上做了测试,结果成功。
附上图: