2016-04-09 8 views
-1

Wenn wir ein Element in eine Linkliste mit Hilfe des Funktionsaufrufs einfügen, warum ist es notwendig, die Referenz von head anstelle von direkt head zum Beispiel zu übergeben ... wir verwenden void push (struct node ** head_ref, int new_data) anstelle von void push (struct node * head, int new_data) .. wo push ist die funktion, ein element einzufügen ..?Verknüpftes Listeneinfügungsproblem mit Funktionsaufruf

+0

Nicht sicher von der Referenz, nehme ich an, weil der 'Kopf' selbst aktualisiert werden muss. Brauchen Sie den ganzen Code, um eine definitive Antwort zu geben –

Antwort

0

Sie nicht genügend Informationen über Ihre Push-Funktion gegeben haben, genau zu bestimmen, warum das Funktionsargument, wie das ist (dh es wird ein Element am Ende oder am Anfang Einfügen?)

Eines der wichtigsten Gründe, einen Zeiger auf einen Zeiger zu übergeben, sind, wenn sich der Kopfzeiger ändert und Sie die Änderung nach dem Funktionsaufruf beibehalten möchten.

Ich kann mir zwei Möglichkeiten vorstellen, warum die Einfügefunktion diese Argumentstruktur hat.

Wenn Ihre Push-Funktion am Ende der Liste eingefügt wird und der Einfügefunktion eine leere Liste (in diesem Fall ein Nullzeiger) zugewiesen wird, würde der Zeiger auf den Kopf von einem Nullzeiger auf die Adresse des einzelnen Elements wechseln eingefügt, der jetzt der Kopf ist.

Wenn Ihre Push-Funktion jedes Mal am Kopf eingefügt wird, ändert sich die Adresse des Kopfknotens ständig.

beispielsweise in der folgenden verketteten Liste der Kopfzeiger zeigt auf den Knoten, die 1:

1 -> 2 -> 3 -> 4

nach dem Datenelement 5 nach vorne schieben die verknüpfte Listendarstellung wie folgt aussehen:

5 -> 1 -> 2 -> 3 -> 4

So 5 ist jetzt, wo der Kopfzeiger zeigen sollte. Wenn die Push-Funktion jedoch die Argumentstruktur von void push(struct node *head_ref, int new_data) hätte, würde die head_ref nach dem Verlassen der Funktion immer noch auf den Knoten zeigen, der 1 enthält. Bei void push(struct node **head_ref, int new_data) wird jedoch die Änderung der Position des aktuellen header_ref im Zeiger darauf gespeichert.

Verwandte Themen