Ну, по крайней мере, вам нужно сделать следующее в equeue
:
newNode.setLink(front);
На самом деле, я не верю, что вам нужны и front
, и rear
, поскольку front
всегда будет доступен через rear.getLink()
.
Вот предложение:
public class CircularLinkedList {
LLObjectNode rear;
// Adds element to the rear of this queue.
public void enqueue(Object element) {
LLObjectNode newNode = new LLObjectNode(element);
if (!isEmpty())
rear.setLink(newNode);
LLObjectNode front = front();
rear = newNode;
// Set new nodes successor to front
newNode.setLink(front);
}
private LLObjectNode front() {
return rear.getLink();
}
// Throws QueueUnderflowException if this queue is empty;
// otherwise, removes front element from this queue and returns it.
public Object dequeue() {
if (isEmpty())
throw new QueueUnderflowException(
"Dequeue attempted on empty queue.");
Object element = front().getInfo();
// Exclude front from list
if (onlyOneLeft())
rear = null;
else
rear.setLink(front().getLink());
return element;
}
private boolean onlyOneLeft() {
return front() == rear;
}
public boolean isEmpty() {
// Returns true if this queue is empty; otherwise, returns false.
return rear == null;
}
}