Реализация очереди с использованием ссылки в Java

#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 если решение помогло вам решить вашу проблему, пожалуйста, отметьте его как принятый ответ.