我正在尝试为循环链表建立入队方法。这是我到目前为止所拥有的:

public class Test<T> implements UnboundedQueueInterface<T> {
    protected LLNode<T> rear;
    protected LLNode<T> current;

    public Test() {
        rear = null;
        current = null;
    }

    @Override
    public boolean isEmpty() {
        if (rear == null) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public void enqueue(T element) {
        LLNode<T> node = new LLNode<T>(element);

        if (rear == null) {
            rear = node;
            node.setLink(rear);
        } else {
            LLNode<T> temp = rear;
            rear = node;
            node.setLink(temp);
        }
    }
}


它不是链接到第一个元素的最后一个元素,而是链接到倒数第二个元素,依此类推。有任何想法吗?

最佳答案

LLNode<T> temp = rear;
rear = node;
node.setLink(temp);


temp保留原始后部。调用setLink时,您要说的是指向temp,这是原始位置。相反,您需要指向Rear.getLink()指向第一个元素(因为旧的后方指向第一个元素)。

之后,您还有另一个要修复的链接。 temp(旧的后部)仍指向第一个元素,但应对其进行更新。

09-26 10:04