使用链表的Javascript队列实现

时间:2019-06-16 05:04:13

标签: 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')

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

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

请看看。

this.first 的变化方式甚至都没有触及。

实际上答案是正确的,但是我听不懂 逻辑。

1 个答案:

答案 0 :(得分:3)

看看这两行:

this.first = newNode;
this.last = newNode;

您要将参考设置为this.first,并将this.last设置为同一对象。基本上,this.firstthis.last具有相同的内存地址。

因此,下次您拨打电话时:

this.last.next = newNode;
this.last = newNode;

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