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

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

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

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

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

Другие вопросы по тегам