Hallo, ich hoffe ich poste hier ins richtige Forum. Hab ein Problem bei einer Übung
Kann mir da jemand helfen?
Mein Vorschlag:
Hätt jemand eine Idee wie man das ganze mit einem endrekursiven Algorithmus lösen kann ?
thx für Tipps und Greetz
Eine einfach verkette Liste ist eine dynamische Datenstruktur, welche eine im vorhinein unbestimmte Anzahl an Elementen speichert. Jedes Element enthält dabei einen Zeiger auf das nächste Element (next), der Zeiger des letzen Elements zeigt auf den Wert null. Folgende Grafik veranschaulicht eine einfach verkette Liste, welche als Elemente int-Werte enthält:
![]()
Uploaded with ImageShack.us
Folgende Knotendefinition können Sie für dieses Beispiel benutzen:
type Node = {
int value
Node next
}
Der folgende rekursive Algorithmus printReversed(?Node n) gibt eine Liste (wobei n der Anfangsknoten ist) verkehrt herum aus (für obige Liste würde also die Zahlenfolge 5 4 3 2 1 ausgegeben werden).
printReversed(?Node n) {
if(n != null) {
printReversed(?n.next)
write(?n.value)
}
}
a) Bauen Sie den oben angegebenen Algorithmus printReversed(?Node n) so um, dass nur die letzte Hälfte der Liste ausgegeben wird. Sollte die Länge der Liste ungerade sein, so soll das mittlere Element mitausgegeben werden. Für das obige Beispiel sollte die Ausgabe folgendermaßen aussehen: 5 4 3
Hinweise: Sie dürfen die Aufrufschnittstelle des Algorithmus verändern (also z.B. einen Rückgabewert oder zusätzliche Parameter einführen). Allerdings soll Ihr Algorithmus die Listenelemente nicht vor dem Ausgeben abzählen, auch ist die Länge der Liste beim Aufruf des Algorithmus nicht bekannt (die Länge der Liste kann also nicht als Parameter übergeben werden)
Kann mir da jemand helfen?
Mein Vorschlag:
printReversed(?Node n ?int i ?int last){
if(n!=null){
printReversed(?n.next ?i+1 ?last)
if(i?last/2){
write(?n.next)
}
i=i-1
}else{
last=i
}
}
Hätt jemand eine Idee wie man das ganze mit einem endrekursiven Algorithmus lösen kann ?
thx für Tipps und Greetz
Zuletzt bearbeitet: