在java中通过linked-list实现队列的困难

时间:2017-10-02 20:01:08

标签: java linked-list queue

最近我在java中读到了enqueue的实现,并且对于其中几行的含义变得非常困惑。

public void enqueue(String item) {
    Node oldlast = last;
    last = new Node();
    last.item = item;
    last.next = null;

    if (isEmpty())
        first = last;
    else
        oldlast.next = last;
}

我很困惑,因为oldlast只在这个方法中创建,为什么我们会在其他之后声明“oldlast.next = last”?在方法之后它会被销毁,对吗?

另外,如果我们只在第一个为空时添加last to first,如果我添加两个节点然后删除两个节点会不会错误?由于首先只添加了一个节点而我想删除两个节点会有异常吗?

2 个答案:

答案 0 :(得分:0)

public void enqueue(String item)
{
    Node oldlast = last; // last points to some Node_A, oldlast also will point at the same object
    last = new Node(); // Now last points to new object (Node_B), old last still points to Node_A
    last.item = item;
    last.next = null;
    if (isEmpty()) first = last;
    else oldlast.next = last;
}

答案 1 :(得分:0)

oldLast不是创建的,它只是对last的同一对象的引用。

public void enqueue(String item)
{
    Node oldlast = last; // oldLast -> nodeX, last -> nodeX
    last = new Node(); // oldLast -> nodeX, last -> nodeY
    last.item = item;
    last.next = null;
    if (isEmpty()) first = last;
    else oldlast.next = last; // change the nodeX
}