V případě implementace pomocí vázaného seznamu si můžeme udržovat odkaz na první prvek, takže pro odebrání prvku ze začátku fronty nemusíme zbývající prvky přesunovat, ale postačí jen přesměrování odkazu z prvního prvku na druhý. Složitost této operace je tedy konstantní. Pro připojení prvku na konec fronty potřebujeme vyhledat poslední prvek. Pokud budeme postupovat od začátku fronty a přesouvat se směrem vpřed až k poslednímu prvku, bude tato operace vyžadovat počet kroků úměrný délce fronty, takže časová složitost operace vkládání bude lineární. Ovšem opět postačí si pamatovat odkaz na poslední prvek a ten pak připojit jednoduchým přesměrováním odkazů (viz Obr. 3.5). Tato operace má již složitost konstantní.
class QueueElem {
Object data; // hodnota
QueueElem next; // reference na další prvek
QueueElem(Object data, QueueElem next) {
this.data = data;
this.next = next;
}
}
public class LinkedQueue implements Queue
{
public void enqueue(Object obj) {
QueueElem elem = new QueueElem(obj, null);
if( _last == null )
_first = elem;
else
_last.next = elem;
_last = elem;
}
public Object dequeue() {
assert _first != null : "Fronta je prazdna";
QueueElem elem = _first;
_first = elem.next;
if( _first == null ) _last = null;
return elem.data;
}
public Object front() {
assert _first != null : "Fronta je prazdna";
return _first.data;
}
public boolean empty() {
return _first == null;
}
protected QueueElem _first = null;
protected QueueElem _last = null;
}