Hallo, bin noch ein Programmier Anfänger und bräuchte bei dieser Aufgabenstellung ein bisschen Hilfe:
"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 letzten Elements zeigt auf den Wert null.
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.
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ühren Sie bei Bedarf einen Hilfsalgorithmus mit erweiterter Aufrufschnittstelle (mit Rückgabewert und/oder zusätzlichen Parametern) ein.
Es ist nicht erlaubt, die Listenelemente vor dem rekursiven Aufruf abzuzählen (die Länge der Liste kann also nicht als Parameter übergeben werden)."
Mein Ansatz wäre gewesen jedesmal vor Aufruf der Rekursion einen zähler einzubauen aber da dies nicht erlaubt habe ich keine Idee wie ich dieses Problem sonst lösen könnte; hätte wer von euch vielleicht einen Ansatz?
"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 letzten Elements zeigt auf den Wert null.
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.
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ühren Sie bei Bedarf einen Hilfsalgorithmus mit erweiterter Aufrufschnittstelle (mit Rückgabewert und/oder zusätzlichen Parametern) ein.
Es ist nicht erlaubt, die Listenelemente vor dem rekursiven Aufruf abzuzählen (die Länge der Liste kann also nicht als Parameter übergeben werden)."
Mein Ansatz wäre gewesen jedesmal vor Aufruf der Rekursion einen zähler einzubauen aber da dies nicht erlaubt habe ich keine Idee wie ich dieses Problem sonst lösen könnte; hätte wer von euch vielleicht einen Ansatz?