class Prioritetskoe> {
// Dette er bare en gjennomgan av prioritetsk?en. Dette er ganske likt som det dere gjorde i oblig3.
// Dette var mest for ? illusterer at vi kan bruke et interface til ? begrense hvilke elementer vi kan sette inn i
// beholderen.
Node foerste = null;
class Node {
E data;
Node neste;
public Node(E x) {
data = x;
}
}
public void settInn(E x) {
// Fra tegningen min fant jeg tre tilfeller jeg m? ta hensyn til n?r jeg skal sette inn nye elementer.
// 1. N?r lista er tom:
if (foerste == null) {
foerste = new Node(x);
return;
}
Node nyNode = new Node(x);
// 2. N?r det nye elementet er mindre enn det f?rste elementet i lista:
if (x.compareTo(foerste.data) <= 0) {
// x.compareTo(y) -> returnerer typisk (x - y)
nyNode.neste = foerste;
foerste = nyNode;
return;
}
// 3. N?r noden m? plasseres en eller annen plass inne i lista (kan v?re sist).
Node neste = foerste;
Node forrige = null;
// Finner den f?rste noden hvor x < neste.data, eller den siste node.
while (x.compareTo(neste.data) > 0 && neste != null) {
forrige = neste;
neste = neste.neste;
}
// Siden neste n? enten peker p? null, eller p? en node som er st?rre enn x, trenger jeg ? mellomlagre noden som kom f?r,
// siden den nye noden m? plasseres mellom forrige og neste pekerene.
forrige.neste = nyNode;
// Siden jeg alltid skal plassere noden etter forrige, er det uvesentlig om neste peker p? null, s? jeg kan trygt sette
// nyNode sin neste til ? peke p? den.
nyNode.neste = neste;
}
}