我正在尝试为循环链表建立入队方法。这是我到目前为止所拥有的:
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(旧的后部)仍指向第一个元素,但应对其进行更新。