你的代码有几个问题,我帮你指出来:
1. **`move_to_tail`方法的问题:**
node = self.hashmap # 应该是 `node = self.hashmap[key]`, 缺少[key]
2. **`get`方法的问题:**
return self.hashmap.value # 应该是 `return self.hashmap[key].value`
3. **`put`方法的问题:**
- 更新`hashmap`时,应该是`self.hashmap[key] = new`而不是`self.hashmap = new`。
- 如果达到最大容量时删除节点,不仅要更新链表,还要确保在`hashmap`中删除对应的`key`。
下面是修改后的代码:
class ListNode:
def __init__(self, key=None, value=None):
self.key = key
self.value = value
self.next = None
self.pre = None
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.hashmap = {}
self.head = ListNode()
self.tail = ListNode()
self.head.next = self.tail
self.tail.pre = self.head
def move_to_tail(self, key: int):
node = self.hashmap[key]
node.pre.next = node.next
node.next.pre = node.pre
node.pre = self.tail.pre
node.next = self.tail
self.tail.pre.next = node
self.tail.pre = node
def get(self, key: int) -> int:
if key in self.hashmap:
self.move_to_tail(key)
return self.hashmap[key].value
else:
return -1
def put(self, key: int, value: int) -> None:
if key in self.hashmap:
self.hashmap[key].value = value
self.move_to_tail(key)
else:
if len(self.hashmap) == self.capacity:
# Remove the least recently used node
lru = self.head.next
del self.hashmap[lru.key]
self.head.next = lru.next
lru.next.pre = self.head
# Add new node
new = ListNode(key, value)
self.hashmap[key] = new
new.pre = self.tail.pre
new.next = self.tail
self.tail.pre.next = new
self.tail.pre = new
这个版本的代码修复了之前的错误,并实现了LRU缓存的功能。希望这能帮助到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |