C++-verknüpfte Liste – Durch das Einfügen einer Knotenfunktion werden Werte außerhalb des Funktionsbereichs nicht aktualisiert
-
24-12-2019 - |
Frage
Ich schreibe ein Programm, das Funktionen für eine einfach verknüpfte Liste ausführt, die Knoten der folgenden Struktur enthält:
typedef int ITEM;
typedef struct NODE* NODEptr;
struct NODE
{
ITEM data;
NODEptr next;
};
Und das ist die Funktion, die ich aufrufe, um einen Knoten zum Kopf der Liste hinzuzufügen (hdList zeigt auf den Kopf der Liste):
void addToHead(NODEptr &hdList, ITEM input)
{
NODEptr newNode = new NODE;
newNode->data = input;
newNode->next = nullptr;
hdList = newNode;
}
Allerdings habe ich bei der Verwendung des Debuggers festgestellt, dass der Wert von hdList nicht aktualisiert wird, wenn das Programm die Funktion verlässt, obwohl er als Referenz übergeben wird, und ich bin mir nicht sicher, warum.
Vielen Dank für Ihre Hilfe und Ihren Rat.
BEARBEITEN:Wie gewünscht, den vollständigen Code hier: http://pastebin.com/bLv0S2QG Außerdem kompiliere ich mit Visual Studio 2013
Lösung
Die richtige Funktion sieht so aus
void addToHead(NODEptr &hdList, ITEM input)
{
NODEptr newNode = new NODE;
newNode->data = input;
newNode->next = hdList;
hdList = newNode;
}
Oder wenn Ihr Compiler C++ 2011 unterstützt
void addToHead(NODEptr &hdList, ITEM input)
{
NODEptr newNode = new NODE { input, hdList };
hdList = newNode;
}
Anfänglich hdList
muss von initialisiert werden nullptr
oder NULL
.Zum Beispiel
NODEptr hdList = nullptr;