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.

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

package main

import (
    "container/list"
)

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{
        Capacity:  capacity,
        LinkList:  list.New(),
        HashTable: make(map[int]*list.Element),
        Length:    0,
    }
}

func (this *LRUCache) Get(key int) int {
    if element, ok := this.HashTable[key]; ok {
        this.LinkList.MoveToFront(element)
        return element.Value.(*Node).Value
    }
    return -1 // 如果找不到key,返回-1。
}

func (this *LRUCache) Put(key int, value int) {
    if element, ok := this.HashTable[key]; ok {
        // 更新已存在节点的值并移动到前面
        element.Value.(*Node).Value = value
        this.LinkList.MoveToFront(element)
        return
    }

    // 如果缓存已满,则需要删除最后一个(最近最少使用)元素。
    if this.Length == this.Capacity {
        back := this.LinkList.Back()
        if back != nil { // 确保不为空
            this.LinkList.Remove(back)
            delete(this.HashTable, back.Value.(*Node).Key)
            this.Length--
        }
    }

	// 添加新节点。
	newNode := &Node{Key: key, Value: value}
	newElement := this.LinkList.PushFront(newNode)
	this.HashTable[key] = newElement
	this.Length++
}

// 测试代码可以放这里,例如调用对象等...

关键更改:

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?