package Model.Liste;


/**
 * Beschreibt einen Knoten der Liste.
 * 
 * @author ISB-Arbeitskreis, Umsetzungshilfen Informatik 12
 * @version 1.0
 */
class KNOTEN extends LISTENELEMENT
{

    /* Referenz auf das Datenelement */
    private Model. DATENELEMENT daten;
    /* Referenz auf den Nachfolgerknoten */
    private LISTENELEMENT nachfolger;
    
    /**
     * Legt einen neuen Knoten mit gegebenem Datenelement und gegebenem Nachfolger an.
     * @param d Referenz auf das von diesem Knoten verwaltete Datenelement
     * @param nf Referenz auf das Nachfolgerelement
     */
    KNOTEN (Model. DATENELEMENT d, LISTENELEMENT nf)
    {
        daten = d;
        nachfolger = nf;
    }
    
    /**
     * F&uuml;gt ein neues Datenelement sortiert in die Liste ein.
     * @param neu Referenz auf des neue Datenelement
     * @return der (neue) Nachfolger f&uuml;r das Vorg&auml;ngerelement
     */
    LISTENELEMENT Einfuegen (Model. DATENELEMENT neu)
    {
        if (neu. Vergleichen (daten) > 0)
        {
            nachfolger = nachfolger. Einfuegen (neu);
            return this;
        }
        else
        {
            return new KNOTEN (neu, this);
        }
    }

    
    /**
     * Sucht ein Datenelement mit dem in der Referenz angegebenen Schl&uuml;ssel.
     * @param schluessel Referenz auf ein Datenelement mit dem zu suchenden Schl&uuml;sselwert
     * @return das gefundene Datenelement oder null
     */
    Model. DATENELEMENT Suchen (Model. DATENELEMENT schluessel)
    {
        LISTE. ZaehlerErhoehen ();
        if (schluessel. Vergleichen (daten) == 0)
        {
            return daten;
        }
        else
        {
            return nachfolger. Suchen (schluessel);
        }
    }
}
