//import java.util.*; import java.util.NoSuchElementException; import java.util.Iterator; public class FIFOListe implements Iterable { private Node hode; private Node hale; public int stoerrelse(){ Node gjeldende = hode; int teller = 0; while (gjeldende != null) { teller++; gjeldende = gjeldende.neste; } return teller; } public boolean erTom(){ // sjekke om hode og hale er null //return hale == null && hode ==null; return stoerrelse() == 0; } public void leggTil(T t){ // sett inn bak Node nyNode = new Node(t); if (erTom()) { hode = nyNode; hale = nyNode; } else { hale.neste = nyNode; hale = nyNode; } } public void fjernAlt(){ hode = null; hale = null; } public T pop() { // ta ut foran T returData = null; if (!erTom()) { returData = hode.data; hode = hode.neste; } return returData; } public void skrivUtListe(){ Node gjeldende = hode; while (gjeldende != null) { System.out.println(gjeldende.data); gjeldende = gjeldende.neste; } } public int stoerrelseRekursiv() { return stoerrelseRekursiv(hode, 0); } public int stoerrelseRekursiv(Node gjeldende, int pos) { if (gjeldende == null) { return pos; } return stoerrelseRekursiv(gjeldende.neste, pos+1); } public void skrivUtRekursivt() { // bruker denne metoden for aa starte skrivUtRekursivt(hode); } public void skrivUtRekursivt(Node gjeldende) { if (gjeldende == null) { return; } System.out.println(gjeldende.data); skrivUtRekursivt(gjeldende.neste); } public void skrivUtRekursivtBaklengs() { // bruker denne metoden for aa starte skrivUtRekursivtBaklengs(hode); } public void skrivUtRekursivtBaklengs(Node gjeldende) { if (gjeldende == null) { return; } skrivUtRekursivtBaklengs(gjeldende.neste); System.out.println(gjeldende.data); } public Iterator iterator() { // skal returne et iterator objekt return new ListeIterator(); } private class ListeIterator implements Iterator { private Node gjeldende = hode; public boolean hasNext() { return gjeldende != null; } public T next() { if (gjeldende == null) { throw new NoSuchElementException("null"); } T returData = gjeldende.data; gjeldende = gjeldende.neste; return returData; } } private class Node{ //peker til neste Node // T data Node neste; T data; Node(T data) { this.data = data; } } }