import java.util.*; class PrioKø> implements Kø, Iterable { private Node første = null; private int størrelse = 0; private static class Node { T element; Node neste; public Node(T element) { this.element = element; this.neste = null; } } @Override public boolean erTom() { return størrelse == 0; } @Override public int størrelse() { return størrelse; } @Override public T hvemErNeste() { if (erTom()) { return null; } return første.element; } @Override public void inn(T element) { Node ny = new Node<>(element); størrelse++; // Hvis køen er tom eller høyest prioritet if (første == null || element.compareTo(første.element) < 0) { ny.neste = første; første = ny; return; } // Finn plass etter prioritet Node søker = første; while ( søker.neste != null && element.compareTo(søker.neste.element) >= 0 ) { søker = søker.neste; } // Funnet plassen ny.neste = søker.neste; søker.neste = ny; } @Override public T ut() { if (erTom()) { return null; } T element = første.element; første = første.neste; størrelse--; return element; } @Override public Iterator iterator() { return new KøIterator(); } private class KøIterator implements Iterator { private Node gjeldende = første; @Override public boolean hasNext() { return gjeldende != null; } @Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T element = gjeldende.element; gjeldende = gjeldende.neste; return element; } } }