Die Streichung des letzten Elements einer Liste löscht ist ein ziemlich einfacher Algorithmus .
Sie müssen die gesamte Liste durchlaufen, bis Sie einen Knoten mit dem next
Zeiger erreichen, der gleich NULL
ist. Dies ist Ihr letztes Element, das Element, das Sie löschen möchten.
Sie müssen also den von diesem Objekt zugewiesenen Speicher freigeben und den Zeiger next
für Ihr vorheriges Element auf NULL
setzen. Dies ist die wichtigste Sache, da es Segmentierungen vermeidet.
Nun, über den Code, den Sie geschrieben, ich sehe, Sie tun etwas ziemlich schlecht .. Sie erklärt *q
und *p
, dann Throught Liste Looping (von einem globalen Node* head
hingewiesen, nehme ich an).
Das Problem ist, dass mit dem Code in der Schleife sind Sie das erste Element aus der verknüpften Liste Entkoppeln und dann die Schleife endet, weil Sie den Zeiger q
in p
kopieren und dann Vertonung next
Zeiger tu Null
was dazu führt, um q->next
auf NULL zu setzen. Die ersten Iterationen gehen „“ fein „“ führen Sie das erste Element mit next
Satz Null
haben die zweite Iteration findet den next
Satz Null
und somit stoppt.
HINWEIS: Bevor Sie die Codelösung veröffentlichen, würde ich gerne wissen, ob Sie ziemlich genau wissen, was der Algorithmuszweck ist, versuchen Sie, Ihren Code zu reparieren, wenn Sie es nicht wieder tun können post den richtigen Algorithmus :)
Es tut es nicht. Es funktioniert überhaupt nicht. Es löscht * alle * Knoten in der Liste und versucht dann, einen Nullzeiger zu löschen. Sie sollten lernen, wie man einen Debugger verwendet, dann können Sie den Code Zeile für Zeile durchlaufen, um zu sehen, was er wirklich tut. –
@Joachim: Eigentlich glaube ich, es entkoppelt nur die Verbindung vom ersten zum zweiten Knoten. – MikeMB
tatsächlich trennt es nur den ersten Knoten. q = Kopf; p = q; p-> next = NULL. Nächste Iteration: 'q = q-> next 'bedeutet' q = null' und verlässt die Schleife also? – FredMaggiowski