使用链表实现 Javascript 队列

sou*_*han 1 javascript

class Node {
    constructor(value){
        this.value = value;
        this.next = null;
    }
}


class Queue{
    constructor(){
        this.first = null;
        this.last = null;
        this.length = 0;
    }

    enqueue(value){
        const newNode = new Node(value)
        if(this.length === 0){
            this.first = newNode;
            this.last = newNode;
        } else {
            this.last.next = newNode;
            this.last = newNode;
        }
        this.length++;
        return this;
    }
}

const myQueue = new Queue();
myQueue.enqueue('a')
myQueue.enqueue('b')
Run Code Online (Sandbox Code Playgroud)

在这里,我正在使用链表实现Queue。在enqueue()方法的else 块中,我没有分配任何东西给 this.first我只分配给this.last

如果更改,我的this.first如何。

请看一看。

this.first是如何在不触及它的情况下发生变化的。

其实答案是正确的,但我无法理解其中的逻辑。

Sha*_*rim 5

看看这两行:

this.first = newNode;
this.last = newNode;
Run Code Online (Sandbox Code Playgroud)

您的设置参考,以this.firstthis.last同一个对象。基本上 this.firstthis.last具有相同的内存地址。

所以,下次你打电话时:

this.last.next = newNode;
this.last = newNode;
Run Code Online (Sandbox Code Playgroud)

this.last.next修改前一个的对象引用newNode,其内存地址与this.first. 因此,当您更改this.last它时,它也会在this.first.