Algoritmer og datastrukturer
Kapittel 3 - Delkapittel 3.3
EnkeltLenketListe - uferdig 1
package hjelpeklasser;

import java.util.Iterator;
import java.util.Objects;

public class EnkeltLenketListe<T> implements Liste<T>
{
  private static final class Node<T>       // en indre nodeklasse
  {
    private T verdi;                       // nodens verdi
    private Node<T> neste;                 // den neste noden

    private Node(T verdi,Node<T> neste)    // konstruktør
    {
      this.verdi = verdi;
      this.neste = neste;
    }
  }  // Node

  private Node<T> hode, hale;  // pekere til første og siste node

  private int antall;          // antall verdier/noder i listen

  public EnkeltLenketListe()   // standardkonstruktør
  {
    hode = hale = null;        // hode og hale til null
    antall = 0;                // ingen verdier - listen er tom
  }

  @Override
  public boolean leggInn(T verdi)   // verdi legges bakerst
  {
    Objects.requireNonNull(verdi, "Ikke tillatt med null-verdier!");

    if (antall == 0)  hode = hale = new Node<>(verdi, null);  // tom liste
    else hale = hale.neste = new Node<>(verdi, null);         // legges bakerst

    antall++;        // en mer i listen
    return true;     // vellykket innlegging
  }

  @Override
  public void leggInn(int indeks, T verdi)    // verdi til posisjon indeks
  {
    Objects.requireNonNull(verdi, "Ikke tillatt med null-verdier!");

    indeksKontroll(indeks, true);        // true: indeks = antall er lovlig

    if (indeks == 0)                     // ny verdi skal ligge først
    {
      hode = new Node<>(verdi, hode);    // legges først
      if (antall == 0) hale = hode;      // hode og hale peker på samme node
    }
    else if (indeks == antall)           // ny verdi skal ligge bakerst
    {
      hale = hale.neste = new Node<>(verdi, null);  // legges bakerst
    }
    else
    {
      Node<T> p = hode;                  // p flyttes indeks - 1 ganger
      for (int i = 1; i < indeks; i++) p = p.neste;

      p.neste = new Node<>(verdi, p.neste);  // verdi settes inn i listen
    }

    antall++;                            // listen har fått en ny verdi
  }

  @Override
  public boolean inneholder(T t)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public T hent(int indeks)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public int indeksTil(T t)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public T oppdater(int indeks, T t)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public T fjern(int indeks)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public boolean fjern(T t)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public int antall()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public boolean tom()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public void nullstill()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public Iterator<T> iterator()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public String toString()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

}  // EnkeltLenketListe