Hallo , ich muss mit gegebene methoden (gibNachfolger,gibPerson,setzeNachfolger()) , die im Anhang zu finden sind , die Lücken in den methoden FuegeEin und entferne ausfüllen .Ich weiß nicht, wie ich dies genau implementieren kann, damit Linkedlist genau funktioniert ! Kann jemand mir bitte helfen ? Ich bedanke mich im Voraus !
class LinkedPersonListe
{
// Der Kopf der verketteten Liste
private LinkedPersonKnoten _listenkopf;
// Die logische Laenge der Liste (Kardinalitaet).
private int _anzahlPersonen;
/**
* Initialisiert eine neue LinkedPersonListe.
*/
public LinkedPersonListe()
{
_listenkopf = new LinkedPersonKnoten();
_anzahlPersonen = 0;
}
/**
* Gib die Person der angegebenen Position zurueck. Bei einer ungueltigen
* Position wird null zurueckgegeben.
*
* @param position Die Position der Person, die zurueckgeben werden soll.
* @Return die Person an der Position <code>position</code>.
*/
public Person gibPerson(int position)
{
if(!istGueltigePosition(position)) return null;
LinkedPersonKnoten knoten = gibKnoten(position);
return knoten.gibPerson();
}
/**
* Gib die Laenge der Liste zurueck.
*
* @Return Anzahl der Personen in der Liste.
*/
public int gibLaenge()
{
return _anzahlPersonen;
}
/**
* Fuege eine Person an der Position position in die Liste
* ein. Alle folgenden Eintraege werden um eine Position verschoben.
* Wenn position gleich der Laenge der Personenliste ist, dann
* fuege die Person am Ende an. Wenn die Person null ist oder die
* Position ungueltig, bleibt die Liste unveraendert.
*
* @param person Die einzufuegende Person (darf nicht null sein).
* @param position Die Position, an welcher die Person eingefuegt werden soll.
*/
public void fuegeEin(Person person, int position)
{
if(person == null) return;
if(!istGueltigeEinfuegePosition(position)) return;
LinkedPersonKnoten links = ................................ ;
LinkedPersonKnoten neu = ..................................... ;
...............................................;
++_anzahlPersonen;
}
/**
* Entferne die Person an der angegebenen Position. Alle folgenden Eintraege
* werden um eine Position verschoben. Bei einer ungueltigen Position
* bleibt die Liste unveraendert.
*
* @param position Die Position der Person, der entfernt werden soll.
*/
public void entferne(int position)
{
if(!istGueltigePosition(position)) return;
LinkedPersonKnoten links = ....................... ;
LinkedPersonKnoten rechts =......................... ;
......................................;
--_anzahlPersonen;
}
/**
* Entferne alle Personen aus der Liste.
*/
public void leere()
{
_listenkopf=null ;
_anzahlPersonen = 0;
}
/**
* Bestimmt ob die uebergebene Position gueltig ist.
*
* @param position fuer den Listenzugriff
* @Return ist die Position gueltig [0 - n-1]
*/
private boolean istGueltigePosition(int position)
{
return 0 <= position && position < _anzahlPersonen;
}
/**
* Bestimmt ob die uebergebene Position eine gueltige Einfuegeposition ist.
*
* @param position fuer das Einfuegen
* @Return ist die Position gueltig [0 - n]
*/
private boolean istGueltigeEinfuegePosition(int position)
{
return 0 <= position && position <= _anzahlPersonen;
}
/**
* Gibt den Knoten an der Position position zurueck. Damit die Liste nach links
* durch den Listenkopf und nach rechts durch null abgegrenzt ist, werden bei
* ungueltigen Positionen die jeweils naeherliegende Grenze der Liste zurueckgegeben.
*
* @param position die gewuenschte Position des zurueckzugebenden Knotens
* @Return der LinkedPersonKnoten an der gewuenschten Position
* im Fall (position < 0) _listenkopf,
* im Fall (position >= _anzahlPersonen) null
*/
private LinkedPersonKnoten gibKnoten(int position)
{
if(position < 0) return _listenkopf;
if(position >= _anzahlPersonen) return null;
LinkedPersonKnoten knoten = _listenkopf;
for (int i = 0; i <= position; ++i)
{
knoten = knoten.gibNachfolger();
}
return knoten;
}
}
class LinkedPersonListe
{
// Der Kopf der verketteten Liste
private LinkedPersonKnoten _listenkopf;
// Die logische Laenge der Liste (Kardinalitaet).
private int _anzahlPersonen;
/**
* Initialisiert eine neue LinkedPersonListe.
*/
public LinkedPersonListe()
{
_listenkopf = new LinkedPersonKnoten();
_anzahlPersonen = 0;
}
/**
* Gib die Person der angegebenen Position zurueck. Bei einer ungueltigen
* Position wird null zurueckgegeben.
*
* @param position Die Position der Person, die zurueckgeben werden soll.
* @Return die Person an der Position <code>position</code>.
*/
public Person gibPerson(int position)
{
if(!istGueltigePosition(position)) return null;
LinkedPersonKnoten knoten = gibKnoten(position);
return knoten.gibPerson();
}
/**
* Gib die Laenge der Liste zurueck.
*
* @Return Anzahl der Personen in der Liste.
*/
public int gibLaenge()
{
return _anzahlPersonen;
}
/**
* Fuege eine Person an der Position position in die Liste
* ein. Alle folgenden Eintraege werden um eine Position verschoben.
* Wenn position gleich der Laenge der Personenliste ist, dann
* fuege die Person am Ende an. Wenn die Person null ist oder die
* Position ungueltig, bleibt die Liste unveraendert.
*
* @param person Die einzufuegende Person (darf nicht null sein).
* @param position Die Position, an welcher die Person eingefuegt werden soll.
*/
public void fuegeEin(Person person, int position)
{
if(person == null) return;
if(!istGueltigeEinfuegePosition(position)) return;
LinkedPersonKnoten links = ................................ ;
LinkedPersonKnoten neu = ..................................... ;
...............................................;
++_anzahlPersonen;
}
/**
* Entferne die Person an der angegebenen Position. Alle folgenden Eintraege
* werden um eine Position verschoben. Bei einer ungueltigen Position
* bleibt die Liste unveraendert.
*
* @param position Die Position der Person, der entfernt werden soll.
*/
public void entferne(int position)
{
if(!istGueltigePosition(position)) return;
LinkedPersonKnoten links = ....................... ;
LinkedPersonKnoten rechts =......................... ;
......................................;
--_anzahlPersonen;
}
/**
* Entferne alle Personen aus der Liste.
*/
public void leere()
{
_listenkopf=null ;
_anzahlPersonen = 0;
}
/**
* Bestimmt ob die uebergebene Position gueltig ist.
*
* @param position fuer den Listenzugriff
* @Return ist die Position gueltig [0 - n-1]
*/
private boolean istGueltigePosition(int position)
{
return 0 <= position && position < _anzahlPersonen;
}
/**
* Bestimmt ob die uebergebene Position eine gueltige Einfuegeposition ist.
*
* @param position fuer das Einfuegen
* @Return ist die Position gueltig [0 - n]
*/
private boolean istGueltigeEinfuegePosition(int position)
{
return 0 <= position && position <= _anzahlPersonen;
}
/**
* Gibt den Knoten an der Position position zurueck. Damit die Liste nach links
* durch den Listenkopf und nach rechts durch null abgegrenzt ist, werden bei
* ungueltigen Positionen die jeweils naeherliegende Grenze der Liste zurueckgegeben.
*
* @param position die gewuenschte Position des zurueckzugebenden Knotens
* @Return der LinkedPersonKnoten an der gewuenschten Position
* im Fall (position < 0) _listenkopf,
* im Fall (position >= _anzahlPersonen) null
*/
private LinkedPersonKnoten gibKnoten(int position)
{
if(position < 0) return _listenkopf;
if(position >= _anzahlPersonen) return null;
LinkedPersonKnoten knoten = _listenkopf;
for (int i = 0; i <= position; ++i)
{
knoten = knoten.gibNachfolger();
}
return knoten;
}
}