C++-verknüpfte Liste – Durch das Einfügen einer Knotenfunktion werden Werte außerhalb des Funktionsbereichs nicht aktualisiert

StackOverflow https://stackoverflow.com//questions/22082647

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

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top