PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c++ Listenelemente umdrehen


Supa
2005-12-15, 14:56:31
Hab gerade voll ein Brett vorm Kopf, das Problem, ich habe ein Struct:

struct Listenelement
{
int data;
Listenelement *nachfolger;
};


Die Liste ist deffiniert das die Liste zu ende ist wenn Nachfolger=NULL ist.

Mein Problem ist ich soll eine Funktion
Listenelement *invers(Listenelement *Liste)
erstellen die die Zeiger umdreht und den neuen Kopf (ehemals das ende) zurück gibt. Das ganze soll ohne kopieren in eine 2. Liste funktionieren.

Ich hänge gerade daran das egal was ich mache ich überschreibe mir meine nachfolger so das ich damit nicht weiter arbeiten kann. Denke mal das man das nur mit Rekursion lösen kann, nur rekursion ist einfach nicht mein Fall.

Monger
2005-12-15, 15:07:40
Musst du denn deinen eigenen Sortieralgorithmus implementieren? Igitt...


Eine Möglichkeit wäre, von außen zur Mitte hin zu iterieren, und jeweils das obere und untere Element zu vertauschen. Dazu brauchst du dann zumindest eine temporäre Variable die den alten Wert speichert, aber ich denke anders geht es nicht.

Also:

- 1. Element zwischenspeichern
- letztes Element an Stelle des ersten Elements schreiben
- erstes Element an Stelle des letzten Elements schreiben
- mit dem 2. Element das selbe machen
...

Das ist linearer Aufwand mit keinem zusätzlichen Speicheraufwand. Bestimmt gibt es irgendwelche Tricks das schneller und einfacher zu machen, aber die kenne ich halt nicht.

Neomi
2005-12-15, 15:22:30
Du mußt einfach nur durch die Liste durchsteppen und die Zeiger umhängen.

Listenelement * invers (Listenelement * Liste)
{
Listenelement * vorgaenger = NULL;
Listenelement * nachfolger;

while (Liste != NULL)
{
nachfolger = Liste->nachfolger;
Liste->nachfolger = vorgaenger;
vorgaenger = Liste;
Liste = nachfolger;
}

return (vorgaenger);
}