/**
	Diese Klasse repraesentiert Listen als einfach verkettete
	Listen, wobei ein Anker auf ein einfach verkettetes Listenelement 
	gesetzt wird.
 */
 class CharList
 {      private CharListElem head;

      /**
                Dieser Konstruktor erzeugt eine leere Liste.

                @param  elem    das einzufuegende Element
        */
	CharList ()
	{	head = null;
	}

      /**
                Dieser Konstruktor erzeugt eine eineelementige Liste.

                @param  c    der Wert des konstruierten Elements
        */
	CharList (char c)
	{	head = new CharListElem (c);
	}

	/**
		Diese Methode loescht den Inhalt des Listenobjekts,
		d.h. sie macht die aktuelle Liste zur leeren Liste.
	*/
	public void clear ()
	{	head = null;
	}


        /**
                Diese Methode fuegt ein neues Listenelement mit 
		Wert c als erstes Element in die Liste ein.

                @param  c    das einzufuegende Element
        */
        public void addFirst (char c)
	{	CharListElem hilf = new CharListElem (c);
		hilf.setNext(head);
		head = hilf;
	}

        /**
                Diese Methode loescht das
                erste Element der aktuellen Liste.

                Vorbedingung: head != null
        */
        public void rest () 		
	{	head = head.getNext();
	}

        /**
                Diese Methode berechnet den Wert
                des ersten Elements der aktuellen Liste.

                Vorbedingung: head != null
        */        public char getFirst () 		
	{	return head.getData();
	}

        /**
                Diese Methode prueft, ob die aktuelle Liste
                leer ist.
        */
        public boolean isEmpty ()
	{	return head == null;
	}


        /**
                Diese Methode berechnet die Laenge
                der aktuellen Liste.
        */
        public int size ()
	{	CharListElem hilf = head;  int i = 0;
		while (hilf != null)
		{	hilf = hilf.getNext();
			i = i+1;
		}
		return i;
	}

        /**
                Diese Methode prueft, ob die aktuelle
                Liste ein Element mit Wert c enthaelt.

                @param  c       Wert des gesuchten Elements
        */
        public boolean contains (char c)
	{	CharListElem hilf = head;
		while (hilf != null && hilf.getData() != c)
			hilf = hilf.getNext();
		return (hilf != null);
	}

       /**
                Diese Methode berechnet den Wert
                des letzten Elements der aktuellen Liste.

                Vorbedingung: head != null
       */
        public char getLast () 
	{	CharListElem position = head;
		while (position.getNext() !=null)
		{
			position = position.getNext();
		}
		return position.getData();
	}

        /**
                Diese Methode berechnet den Wert des letzten 
		Elements deraktuellen Liste und entfernt dieses
                Element aus der Liste.

                Vorbedingung: head != null
        */
        public char removeLast () 
	{	CharListElem position = head, vorposition = null;
		while (position.getNext() !=null)
		{	vorposition = position;
			position = position.getNext();
		}
		if (vorposition == null) head = null;
		else vorposition.setNext(null);
		return position.getData();
	}

}
