2 Stimmen

Neuer Ansatz für das Hinzufügen eines neuen Knotens zu einer verknüpften Liste

void addNewNode (struct node *head, int n)
{
    struct node* temp = (struct node*) malloc(sizeof(struct node));
    temp -> data = n;
    temp -> link = head;
    head = temp;
}

Der oben angegebene Code ist die populär falsche Version einer Funktion zum Hinzufügen eines neuen Knotens am Kopf einer verknüpften Liste. Im Allgemeinen sind die korrekten Versionen wie folgt,

void addNewNode (struct node **head, int n);
void addNewNode (struct node * &head, int n);

Ich habe eine andere, einfache Funktion für diesen Zweck entwickelt, die gut funktioniert.

struct node* addNewNode (struct node *head, int n)
{
    struct node* temp = (struct node*) malloc(sizeof(struct node));
    temp -> data = n;
    temp -> link = head;
    return temp;
}

Aber ich habe nicht gesehen, dass dies in Code und Tutorials verwendet oder diskutiert wird, und daher bin ich neugierig zu wissen, ob dieser Ansatz einen Fehler hat.

0voto

sergtk Punkte 10154

Ich sehe in keinem der genannten korrekten Codes Probleme. Den Kopf zu ändern oder nicht zu ändern ist eine Frage des Designs - und wie man die geänderte Liste zurückgibt. Eine gute Schnittstelle ist in std::list<> als Beispiel implementiert, wo OOP verwendet wird, ein solcher Ansatz ist frei von potentiellen Problemen. head pointer ist versteckt und man kann ihn nach Belieben ändern, und da der Aufrufer head nicht explizit speichert, ist seine Referenz auf die Liste immer korrekt.

eine Sache, die hässlich aussieht (wenn Sie C++, nicht C verwenden) ist ein malloc, besser zu verwenden 'new'.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X