SOURCE

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 命令行工具 X clear

                    
>
console