#java #queue
Вопрос:
Я пытаюсь реализовать очередь в Java, используя этот класс ссылок, который я создал. Однако я не понимаю, насколько он отличается от LinkedList, предоставленного в Java. Как я могу добавить новое значение в конец экземпляра ссылки (в этом случае я хотел бы добавить новое значение в конец первого)?
private static class Linklt;Lgt; { L val; Link next; Link(L val) { this.val = val; this.next = null; } } private Linklt;Tgt; first = null; private Linklt;Tgt; last = null; public void put(T val) { Linklt;Tgt; oldLast = last; last = new Linklt;Tgt;(val); if (first == null) { first = last; } else { oldLast.next = last; first = oldLast; } }
Я мог найти способы реализации очереди только с помощью linkedlist в Google, но не с помощью моей собственной структуры/класса.
Это метод take() :
public T take() { T val = null; if (first != null) { val = first.val; first = first.next; } return val; }
Например, если я попытаюсь запустить основной метод:
public static void main(String[] args) { UnsafeMessageQueuelt;Integergt; queue = new UnsafeMessageQueuelt;gt;(); for (int i = 0; i lt; 10; i ) { queue.put(i); } for (int i = 0; i lt; 10; i ) { System.out.println(queue.take()); } }
тогда вывод, напечатанный в терминале, равен 8 9.
Ответ №1:
Указатель «Первый» не должен обновляться при вставке нового элемента в очередь, first всегда будет оставаться первым в очереди, если он не был извлечен. Вам нужно только обновить указатель «последний» при вставке нового элемента.
public void put(T val) { Lintlt;Tgt; item = new Linklt;Tgt;(val); if(first == null) { first = item; last = first; } else { last.next = item; last = last.next; } }
Комментарии:
1. О, теперь я это понимаю! Большое вам спасибо:))
2. @kim если решение помогло вам решить вашу проблему, пожалуйста, отметьте его как принятый ответ.