import java.util.Iterator; import java.util.NoSuchElementException; public class FIFOListe implements Iterable { private Node hode; private Node hale; private class Node { private Node neste; private T verdi; Node(T v) { verdi = v; } } public int storrelse() { int teller = 0; for (Node tmp = hode; tmp != null; tmp = tmp.neste) { teller++; } return teller; } public int rekurStorrelse() { return hjelpStoerrelse(hode, 0); } public int hjelpStoerrelse(Node n, int str) { if (n != null) { return hjelpStoerrelse(n.neste, str+1); } return str; } public boolean erTom() { return hode == null; } public void leggTil(T t) { Node ny = new Node(t); if (erTom()) { hode = ny; } else { hale.neste = ny; } hale = ny; } public void fjernAlt() { hale = hode = null; } public T pop() { if (erTom()) { return null; } Node returneres = hode; if (hode == hale) { fjernAlt(); } else { hode = hode.neste; } return returneres.verdi; } public void skrivUtListe() { System.out.print("["); Node n = hode; while (n != null) { if (n.neste == null) { System.out.print(n.verdi); } else { System.out.print(n.verdi + ", "); } n = n.neste; } System.out.println("]"); } public void skrivUtFremover() { skrivUtFremoverRek(hode); } public void skrivUtFremoverRek(Node n) { if (n != null) { System.out.println(n.verdi); skrivUtFremoverRek(n.neste); } } public void skrivUtBakover() { skrivUtBakoverRek(hode); } public void skrivUtBakoverRek(Node n) { if (n != null) { skrivUtBakoverRek(n.neste); System.out.println(n.verdi); } } @Override public Iterator iterator() { return new FIFOIterator(); } private class FIFOIterator implements Iterator { Node denne = hode; @Override public boolean hasNext() { return denne != null; } @Override public T next() { if (!hasNext()) throw new NoSuchElementException("next"); Node tmp = denne; denne = denne.neste; return tmp.verdi; } } public static void main(String[] args) { FIFOListe liste = new FIFOListe<>(); liste.leggTil("Hei"); liste.leggTil("paa"); liste.leggTil("deg"); liste.skrivUtFremover(); liste.skrivUtBakover(); System.out.println(liste.rekurStorrelse()); } }