# Dynamische Liste löschen



## SebastianII (6. Juni 2004)

Hallo, 

ich hab  mal wieder eine Frage zu mit dynamischen Listen (einfach verkettet), und zwar will ich in meinem Programm die komplette Liste löschen. Kann ich denn mit „delete“ o.Ä. die komplette Liste löschen, oder muss ich erst jedes Element der Liste löschen und dann den Zeiger vom Listen-Anfang auf das Listen-Ende richten?

Vielen Dank

Sebastian


----------



## revelation (6. Juni 2004)

Hallo Sebastian!

Du musst jedes Element einzeln löschen so in der Art:

```
while(pAkt = pFirst)
{
  pFirst = pFirst->next;

  // das Element löschen
  delete pAkt;
}
```



> dann den Zeiger vom Listen-Anfang auf das Listen-Ende richten


Das verstehe ich nicht! Wenn die Liste leer ist, dann ist der Anfang gleich dem Ende, nämlich NULL!

Gruß
Johannes


----------



## SebastianII (6. Juni 2004)

> Wenn die Liste leer ist, dann ist der Anfang gleich dem Ende, nämlich NULL!



...Ähhm, ja das liegt wohl an meiner sehr umständlichen Programmierung. Ich hab es so gelernt, dass ich nen Zeiger am ENDE der der Liste habe, der ist ja immer NULL (glaub ich). Und wenn nun der Anfangszeiger und der Ende-Zeiger beider gleich sind, also NULL dann ist die Liste leer. 

Brauch ich denn überhaupt den Ende-Zeiger? Ich muss ehrlich gestehen ich verstehe den SInn dieses Zeigers nicht so richtig. Vielleicht kannst du mal einen kurzen Blick auf den Quelltext werfen und mir eine kurze Erklärung dazu geben. Ich bin nämlich noch net so "bewandert" was C++ betrifft.

Vielen Dank, auch schon für die letzte Antwort, damit hast du mir sehr weiter geholfen!

MfG

Sebastian


----------



## abcd_hallo (7. Juni 2004)

Hallo zusammen.

Also du brauchst den Endezeiger nicht unbedingt. Aber ist ganz praktisch, weil wenn du etwas an die Liste anhängen willst, hängst du es einfach an pEnde->next, und hängst den Endezeiger um. Hättest du den Endezeiger nicht müsstest du jedesmal die ganze Liste durchsuchen um an das Ende zu kommen (z.B.: 


```
pAkt = pAnfang;

while (pAkt->next != NULL)
{
     pAkt = pAkt->next;
}

// jetzt das neue Element einfügen

pAkt->next = pNew;
```


----------



## Daniel Toplak (8. Juni 2004)

> Also du brauchst den Endezeiger nicht unbedingt.


Aber das wäre ja Schwachsinn, jedesmal durch die Ganze Liste durch zu Laufen, beim Anhängen.
Und beim Löschen auch.
Also da wäre ja eine "Last in First Out" Liste sehr Langsam.

Gruß Homer


----------

