import java.util.Iterator; /* Dette er koden fra andre del av kurset, metodene taUtBak, taUtForan og settInn er endret til å bruke listehode i stedet for hode = hale = null for tom liste */ /* Lenkeliste implementerer grensesnittet Iterable. I praksis vil det si at lenkeliste lover metoden iterator() som returnerer et iterator-objekt som kan iterere over elementene i denne lista */ public class Lenkeliste implements Iterable { private Node hode, hale; private int lengde; //Vi velger å bruke listehode fordi det gjør ting litt enklere //med tanke på settInnSortert metoden, og iteratoren public Lenkeliste() { hode = new Node("LISTEHODE!"); hale = hode; lengde = 0; } private class Node { Node neste; String bok; Node (String bok) { this.bok = bok; } } /* Dette er metoden vi har lovet siden beholderen støtter interfacet iterable. Returnerer en iterator. */ public Iterator iterator() { return new MinIterator(); } /* Dette er klassen for iterator-objektet. Siden dette er en iterator, så støtter den Iterator-grensensittet. Det gjør at vi lover at objekter av denne klassen har metodene hasNext(), next() og remove() */ private class MinIterator implements Iterator { //Pointer husker hvor langt i listen vi har iterert Node pointer = hode; /* Returnerer true dersom det finnes et elemet i lista som vi ikke har returnert enda via next() metoden */ public boolean hasNext() { if(pointer.neste != null) return true; else return false; } /* Returnerer neste objekt, og flytter pointer en frem */ public String next() { if(!hasNext()) return null; pointer = pointer.neste; return pointer.bok; } //Ikke implementert her public void remove() { } } /* Denne metoden setter inn elementene sortert etter alfabetisk rekkefølge. */ public void settInnSortert(String bok) { Node n = new Node(bok); Node temp = hode; while(temp.neste != null) { if(temp.neste.bok.compareTo(n.bok) >= 0) break; temp = temp.neste; } //Her peker temp på elementet før der vi skal sette inn n.neste = temp.neste; temp.neste = n; lengde++; } public String taUtBak() { Node n = hode; Node forrige = hode; if (hode.neste == null) { // hvis bare listehodet er i lista return null; } else { // minst ett element i lista while (n.neste != null) { forrige = n; n = n.neste; } forrige.neste = null; hale = forrige; } return n.bok; } public String taUtForan() { // tar vi ut her er det en kø Node taUt = hode.neste; if (taUt == null) { // lista er tom return null; } //lista er ikke tom hode.neste = taUt.neste; lengde--; return taUt.bok; } public void settInn(String bok) { // setter inn bakerst Node ny = new Node(bok); if (hode.neste == null) { // lista er tom hode.neste = ny; hale = ny; } else { hale.neste = ny; hale = ny; } lengde++; } public void skrivUt() { Node tmp = hode.neste; while (tmp != null) { System.out.println(tmp.bok); tmp = tmp.neste; } } }