Pointer Tausch

Scal

Mitglied
Hallo alle zusammen. Ich und meine Kollegen versuchen schon seit einiger Zeit folgendes Problem zu lösen.
Wir haben eine einfach verkettete Liste. In diesem Beispiel jetzt haben wir 3 Elemente in unserer Liste.

Personlist zeigt auf C.
Personlist -> next zeigt auf B.
Personlist -> next -> next zeigt auf A.

Wir versuchen nun C mit B zu tauschen einfach. Wir haben bereits Hilfpsointer usw. angelegt jedoch funktioniert es nie, meistens endet es damit das wir B verlieren oder in eine Endlosschleife geraten.

Habt ihr einen Tipp wie man am leichtesten und unkompliziertesten C mit B tauschen kann. Quasi einfach die Elemente in der Liste tauschen. Danke für jeden Tipp und eure Hilfe, wir schätzen das wirklich sehr :)

liebe Grüße!
 
Hi

falls ihr die ganzen Knoten (also die ganze struct/class mit next-Pointer)
tauschen (und die Pointer anpassen) wollt:
Bei einer einfach verketteten Liste ist das mindestens umständlich,
weil ihr nicht nur C und C->next (also B) braucht, sondern auch ein D, welches C als next hat,

Eventuell einfacher wäre es, nur die Values von C und B zu tauschen.
Was ist denn der Wert, pro Knoten? Ein int, ein String...?
 
Hi.

So umständlich ist das doch gar nicht.

Man braucht einen Hilfszeiger.

  1. tmp = B
  2. C-> next = A
  3. tmp->next = C
  4. Personlist = tmp

Evtl. macht ihr auch etwas falsch. Zeigt euren Code.
 
Das Problem ist, das jedes Element der Kopf einer weiteren Liste ist also Inhalt tauschen geht leider nicht. Aber guter Gedanke! Wir programmieren mit C.

@deepthroat
Ich habe gerade deine Methode versucht umzusetzen aber wir verlieren dabei A und B. :/ Code zeigen kann ich nicht wirklich da wir ja keinen haben der einigermaßen funktioniert.
 
Also was ich versucht habe war folgendes:

tmp = Personlist;
tmp_2 = Personlist -> next;

Personlist -> next = tmp;
Personlist = tmp_2;
Person_list -> next -> next = tmp_2 -> next;

Funktioniert leider nicht :(
 
Überleg dir einfach mal in Ruhe auf einem Blatt Papier, was dieser Code mit einer Liste von drei Elementen macht. Du kannst z.B. so anfangen:

Code:
Personlist
  |
  V
+-------+      +-------+      +-------+
| C     |  +-->| B     |  +-->| A     |
| next: *--+   | next: *--+   | next: *--> NULL
+-------+      +-------+      +-------+
  ^              ^
  |              |
 tmp           tmp_2

Und dann für jede Anweisung nachvollziehen, wie sich dadurch die Zeiger (Pfeile) ändern. Dann solltest du schnell sehen, was hier schief läuft.

Grüße
Matthias
 
Danke Matthias :)

Also weitere Idee die jedoch in einer Endlosschleife endet:

Personlist = temp -> next;
Personlist -> next -> next = temp2 -> next;
Personlist -> next = temp;

Wieso funktioniert das nicht? :/
 
Ich überleg nun schon seit in der Früh und es funktioniert einfach nichts. Es is echt frustrierend, wir haben sicher alles probiert was wir für möglich halten aber es geht einfach nicht. Kann eventuell jemand einen Code Hint geben oder etwas in die Richtung? Unsere Deadline rückt näher für das Projekt und das ist der letzte Punkt den wir noch brauchen.

Lg und schönen Sonntag noch!
 

Neue Beiträge

Zurück