class LRU2LinkedList {
constructor(length) {
this.length = length
this.list = {}
this.listHead = null
this.listTail = null
}
moveToTail(item) {
const tail = this.listTail
if (item === tail) return
// 1. 断绝当前node 与prev 和 next 的关系
const prevNode = item.prev
const nextNode = item.next
if(prevNode){
if(nextNode){
prevNode.next = nextNode
}else{
delete prevNode.next
}
}
if(nextNode){
if(prevNode){
nextNode.prev = prevNode
}else{
delete nextNode.prev
}
}
// 2.
delete item.prev
delete item.next
// 3.
if(tail){
tail.next = item
item.prev = tail
}
this.listTail = item
}
lengthClean() {
}
get(key) {
const list = this.list
const item = list[key]
if (!item) return null
if (this.listTail === item) {
return item.value
}
this.moveToTail(item)
console.log('set: ' ,this.list)
return item.value
}
set(key, value) {
const list = this.list
const item = list[key]
if (!item) {
const newItem = { key, value }
this.moveToTail(newItem)
list[key] = newItem
this.length++
if (this.length === 1) this.listHead = newItem
} else {
item.value = value
this.moveToTail(item)
}
console.log('get: ' ,this.list)
this.lengthClean()
}
}
var lur = new LRU2LinkedList(3)
console