Как мне поставить в очередь циклический связанный список, убедившись, что последний элемент указывает на первый?

#java #circular-list

#java #циклический список

Вопрос:

Я пытаюсь создать метод постановки в очередь для циклического связанного списка. Вот что у меня есть на данный момент:

 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);
        }
    }
}
  

Вместо последнего элемента, ссылающегося на первый, он ссылается на предпоследний и так далее. Есть идеи?

Ответ №1:

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

temp сохраняет исходную заднюю часть. Когда вы вызываете setLink, вы предлагаете указать на temp, который является исходным задним. Вместо этого вам нужно указать на rear.getLink(), чтобы указать на первый элемент (поскольку старый rear указывал на первый элемент).

После этого у вас все еще есть другая ссылка для исправления. temp (старая задняя часть) по-прежнему указывает на первый элемент, но его следует обновить.