ZBLOG

type Node struct { Key int Value int } type LRUCache struct { Capacity int Length int LinkList *list.List HashTable map[int]*list.Element } func Constructor(capacity int) LRUCache { return LRUCache{ ...

在你的LRUCache实现中,存在一些小问题和潜在的改进。以下是一些主要的修改建议:

  1. 节点存储:你在LinkList中使用的是一个指向Node结构体的指针,而在将元素移到前面时没有正确地处理Value字段。

  2. Length变量的更新:在删除后,你需要确保长度正确更新,并且不应该仅仅依赖于这两个地方来管理长度。

  3. 键值对的删除:当你从链表中删除节点时,也需要确保使用正确的键从哈希表中删除对应的元素。

  4. 缺少导入语句:如果没有导入相关包,代码无法运行。确保你已经导入了所需的包,比如 container/list.

以下是修正后的代码示例:

  1. package main
  2. import (
  3. "container/list"
  4. )
  5. type Node struct {
  6. Key int
  7. Value int
  8. }
  9. type LRUCache struct {
  10. Capacity int
  11. Length int
  12. LinkList *list.List
  13. HashTable map[int]*list.Element
  14. }
  15. func Constructor(capacity int) LRUCache {
  16. return LRUCache{
  17. Capacity: capacity,
  18. LinkList: list.New(),
  19. HashTable: make(map[int]*list.Element),
  20. Length: 0,
  21. }
  22. }
  23. func (this *LRUCache) Get(key int) int {
  24. if element, ok := this.HashTable[key]; ok {
  25. this.LinkList.MoveToFront(element)
  26. return element.Value.(*Node).Value
  27. }
  28. return -1 // 如果找不到key,返回-1。
  29. }
  30. func (this *LRUCache) Put(key int, value int) {
  31. if element, ok := this.HashTable[key]; ok {
  32. // 更新已存在节点的值并移动到前面
  33. element.Value.(*Node).Value = value
  34. this.LinkList.MoveToFront(element)
  35. return
  36. }
  37. // 如果缓存已满,则需要删除最后一个(最近最少使用)元素。
  38. if this.Length == this.Capacity {
  39. back := this.LinkList.Back()
  40. if back != nil { // 确保不为空
  41. this.LinkList.Remove(back)
  42. delete(this.HashTable, back.Value.(*Node).Key)
  43. this.Length--
  44. }
  45. }
  46. // 添加新节点。
  47. newNode := &Node{Key: key, Value: value}
  48. newElement := this.LinkList.PushFront(newNode)
  49. this.HashTable[key] = newElement
  50. this.Length++
  51. }
  52. // 测试代码可以放这里,例如调用对象等...

关键更改:

  • 在创建新节点时,将其添加到链表和哈希表。
  • 在从链表中移除旧节点时,确保将其键从哈希表中也删除。
  • 对于空切片和其他潜在错误情况进行了检查。

这样做可以保证你的LRU Cache实现符合预期,并且能够正确处理各种场景。如果有其他问题,请随时询问!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19759

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?