Das unten stehende Programm wird verwendet, um die Duplikate aus einer sortierten, einfach verknüpften Liste zu entfernen. Der Code gibt Garbage-Werte in der Online-IDE an. Aber wenn ich die Zeile kommentiere.Derselbe Code gibt unterschiedliche Ergebnisse in der Online-IDE und der lokalen IDE.
Das Programm funktioniert gut in Online-IDE selbst. Hier ist die Funktion, die ich geschrieben habe. Die anderen Teile des Codes sind vom Online-Judge klar definiert (nicht von mir).
Und auch der Code ohne Kommentar die Zeile löschen curr; funktioniert gut in lokalen IDE (Codeblocks).
volles Programm:http://ideone.com/9bHab0
Warum erhalte ich den Müll Werte?
Node *removeDuplicates(Node *root)
{
// your code goes here
struct Node* curr = root,*prev = NULL;
while(curr)
{
if(prev==NULL)
prev = curr;
else if(curr->data!=prev->data)
prev = curr;
else
{
prev->next = curr->next;
delete curr;
curr = prev->next;
}
}
return root;
}
EDIT: Man könnte den Zeiger, dessen Standort gelöscht wird, wird sofort neu vergeben. Also könnte hier kein fliegender Zeiger sein!
Haben Sie versucht, es unter einem Debugger auszuführen? –
Sie * do * Ihre 'Node'-Instanzen mit' new' zuweisen? *Alle von ihnen? Was machen ihre Destruktoren? –
Das ist eine glückliche Mischung aus C ('struct Node * curr}) und C++ (' delete curr}) Code. Sind Sie sicher, dass der Aufrufer C++ ist und "operator new" aufruft, um Instanzen zuzuordnen? – IInspectable