Hier ist, was ich bisher getan:die Anzahl der Knoten einer doppelt verknüpften Liste mit Rekursion
struct rep_list {
struct node *head;
struct node *tail;
}
typedef rep_list *list;
int length(const list lst) {
if (lst->head == NULL) {
return 0;
}
else {
lst->head = lst->head->next;
return 1 + length(lst);
}
}
Dies funktioniert, aber der Kopf der Liste die Funktion akzeptiert als ein Parameter geändert wird. Ich weiß nicht, wie ich das beheben soll.
Ich bin nicht erlaubt, die Funktionsdefinition zu ändern, so dass es immer eine Listenvariable akzeptieren sollte.
Irgendwelche Ideen?
EDIT: Ich habe versucht, was Tyler S in den Kommentaren vorgeschlagen, aber ich stieß auf ein anderes Problem. Wenn ich am Anfang eine Variable node * anlege, sollte sie auf lst-> head zeigen. Aber dann ändert jeder rekursive Aufruf der Funktion den Wert zurück in lst-> head und ich kann mich nicht vorwärts bewegen.
Ich denke, Sie müssen einen temporären 'Knoten *' erstellen, um zu vermeiden, den Zustand der Liste zu ändern. Es scheint so, als ob es geändert wird, wenn Sie 'lst-> head = lst-> head-> next 'ausführen. –
Danke für den Vorschlag. Siehe die Bearbeitung, die ich vorgenommen habe. – Rrmm