2017-12-02 2 views
-1

Ich versuche, zwei Knoten in einer verknüpften Liste zu tauschen wie folgt:Swapping verknüpfte Liste Elemente

void swapTwo(course*& first, course*& second) 
{ 
    auto temp = first; 
    first = second; 
    second = temp; 
    second->next = first->next;  // error right here due to self-referencing 
    first->next = second; 
} 

ich einen Fehler bekommen, weil zweit-> nächste ist bereits selbstreferenzierend. Gibt es dafür eine elegante Lösung? Ich kann 2-Gang-Elemente erstellen und zuerst und zweitens neu konstruieren, aber das scheint so brachial. Vielen Dank!

+0

Wie groß ist das Datenelement des Knotens? Sie können einfach 'std :: swap (first-> data, second-> data);' – user4581301

+0

Damit dies funktioniert, müssen Sie auf vorherige Knoten zugreifen. Wenn Sie dies in eine doppelt kreisförmige verknüpfte Liste umwandeln, ersparen Sie sich eine Menge Ärger. – PythEch

+0

Gentlemen (und Damen, wenn überhaupt), ich habe festgestellt, dass die Umwandlung in Vektor, Sortierung, und zurück konvertieren würde mir eine Menge Ärger ersparen. Herzlichen Dank für Ihre Meinung und Freundlichkeit. – CaTx

Antwort

1

Sie müssen mehrere Szenarien berücksichtigen.

  1. Wenn die zwei nicht benachbart sind, noch ist einer von ihnen der Kopf oder der Schwanz
  2. Wenn sie sind neben
  3. Wenn entweder der Kopf oder der Schwanz
  4. Wenn man das ist Kopf, während der andere ist der Schwanz
  5. Wenn sie die einzigen beiden in der verketteten Liste sind.
+0

Danke! Ich dachte, ich kann die verknüpfte Liste einfach in einen Vektor konvertieren, sortieren und dann zurück in die verknüpfte Liste konvertieren. So weniger Kopfschmerzen. – CaTx