
import java.util.*;

public class MinListe<E> implements Samling<E>
{
	private Node<E> første;

  public MinListe()
	{
		første = null;
	}

	public void settInn( E e )
	{
		Node<E> ny = new Node<>( e );
		ny.neste = første;
		første = ny;
	}

	public boolean flereElementer()
	{
		return første != null;
	}

	public boolean inneholder( E e )
	{
		Iterator<E> iter = iterator();
		while( iter.hasNext() )
		{
			if( e.equals( iter.next() ) )
			 return true;
		}
		return false;
	}

	public boolean fjern( E e )
	{
		Iterator<E> iter = iterator();
		while( iter.hasNext() )
		{
			if( e.equals( iter.next() ) )
			{
				iter.remove();
				return true;
			}
		}
		return false;
	}

	public Iterator<E> iterator()
	{
		return new MinIterator();
	}

	public String toString()
	{
		String tekst = "";
		Iterator<E> iter = iterator();
		while( iter.hasNext() )
		{
			tekst += iter.next() + "\n";
		}
		return tekst;
	}


	private class MinIterator implements Iterator<E>
	{
		private Node<E> denne = første;
		private Node<E> siste = null;
		private boolean fjernOK = false;

		public boolean hasNext()
		{
			return denne != null;
		}

		public E next()
		{
			if( !hasNext() )
				throw new NoSuchElementException( "Ingen flere elementer!");

			siste = denne;
			denne = denne.neste;
			fjernOK = true;
			return siste.getElement();
		}

		public void remove()
		{
			if( !fjernOK )
				throw new IllegalStateException( "Ulovlig tilstand!");

			fjernOK = false;

			if( første == siste )
			{
			  første = denne;
				return;
			}

			Node<E> løper = første;

			while( løper.neste != siste )
				 løper = løper.neste;

			løper.neste = denne;
		}
	}



	private class Node<E>
	{
		private E element;

		Node<E> neste;

		public Node( E e )
		{
			element = e;
		}

		public E getElement()
		{
			return element;
		}

		public String toString()
		{
			return element.toString();
		}
	}
}







