UPDATE: Bitte sehen Sie David Grayson Antwort, wenn Sie in einer ähnlichen Position wie meine sind und Ihr Programm überarbeiten möchten.Kopfzeiger in verknüpfter Liste magisch zugewiesen, sollte nicht funktionieren, tut aber
So habe ich in CS202 verknüpfte Listen gelernt und ich habe ein Programm erstellt, das funktioniert, sollte aber nicht. Der genaue Grund, warum es nicht funktionieren sollte, ist, dass ich den Zeiger im ersten Knoten nie dem nächsten Knoten zuweise, aber das Programm kompiliert und läuft perfekt.
(Oder zumindest das ist, wie ich es verstehe. Natürlich muss ich auf einer bestimmten Ebene falsch sein.)
Ich weiß, dass dies nicht der hübscheste Code, aber ich wollte nicht zu verwirren wenn es aus irgendeinem Grund schon funktioniert.
#include <iostream>
using namespace std;
//STRUCTS
struct node
{
int num;
node *ptrNext;
};
//FUNCTIONS
node *addNode(node *currentNode, int i)
{
node *previousNode = currentNode;
currentNode = new node;
currentNode -> num = i;
currentNode -> ptrNext = nullptr;
previousNode -> ptrNext = currentNode;
return currentNode;
}
void printList(node *printingNode)
{
while (printingNode -> ptrNext != nullptr)
{
printingNode = printingNode -> ptrNext;
cout << printingNode -> num << ", ";
}
}
//MAIN
int main()
{
node *head = new node;
node *current;
head -> num = NULL;
head -> ptrNext = nullptr;
current = addNode(head, 23);
current = addNode(current, 28);
current = addNode(current, 45);
current = addNode(current, 57);
printList(head);
return 0;
}
Das Programm kompiliert ohne Fehler oder Warnung, und die Ausgabe sieht wie folgt aus:
23, 28, 45, 57,
Mein Lehrer und ich durch diese verwirrt. Wie kann, wenn in der printList-Funktion verwendet, der Kopf -> ptrNext verknüpft werden?
Die Methode 'addNode' richtet den nächsten Zeiger ein:' previousNode -> ptrNext = currentNode; '. Wenn ich mich nicht irre? – cehnehdeh
Ihre Verwirrung könnte sich aus dieser Zeile ergeben: 'currentNode = new node;' Sie haben sich dafür entschieden, einen Variablennamen zu verwenden, anstatt einen neuen zu erstellen, wodurch der Code auf den ersten Blick falsch aussieht. Ich hätte wahrscheinlich 'node * newNode = new node;' geschrieben und "previousNose" ganz losgeworden. –
"Ich hätte wahrscheinlich den Knoten * newNode = new node; geschrieben und die vorhergehendeNose ganz gelöscht." Das hat den Trick gemacht, es macht jetzt viel mehr Sinn. Ich bin mir immer noch nicht sicher über die Antwort, speziell auf meine Frage, aber jetzt habe ich wenigstens ein Programm, das Sinn macht. Vielen Dank! –