Vielleicht bin ich damit fertig, dies zu vereinfachen, aber einfach die kleinste Liste zu iterieren und die letzten Knoten Link
als Zusammenführungspunkt zu verwenden?
Wo Data->Link->Link == NULL
ist also der Endpunkt, der Data->Link
als Zusammenführungspunkt angegeben wird (am Ende der Liste)?
BEARBEITEN:
Okay, von dem Bild, das Sie gepostet haben, analysieren Sie die beiden Listen, die kleinste zuerst. Mit der kleinsten Liste können Sie die Verweise auf den folgenden Knoten pflegen. Wenn Sie nun die zweite Liste analysieren, führen Sie einen Vergleich der Referenz durch, um herauszufinden, wo Referenz [i] die Referenz unter LinkedList [i] -> Link ist. Dies gibt den Zusammenführungspunkt. Zeit, mit Bildern zu erklären (überlagern Sie die Werte auf dem Bild mit dem OP).
Sie haben eine verknüpfte Liste (Referenzen siehe unten):
A->B->C->D->E
Sie haben eine zweite verknüpfte Liste:
1->2->
Mit der zusammengeführten Liste würden die Referenzen dann wie folgt lauten:
1->2->D->E->
Daher ordnen Sie die erste "kleinere" Liste zu (da die zusammengeführte Liste, die wir zählen, eine Länge von 4 und die Hauptliste 5 hat)
Durchlaufen Sie die erste Liste und pflegen Sie eine Referenz mit Referenzen.
Die Liste enthält die folgenden Referenzen Pointers { 1, 2, D, E }
.
Wir gehen nun die zweite Liste durch:
-> A - Contains reference in Pointers? No, move on
-> B - Contains reference in Pointers? No, move on
-> C - Contains reference in Pointers? No, move on
-> D - Contains reference in Pointers? Yes, merge point found, break.
Sicher, Sie pflegen eine neue Liste von Zeigern, aber das liegt nicht außerhalb der Spezifikation. Die erste Liste wird jedoch genau einmal analysiert, und die zweite Liste wird nur dann vollständig analysiert, wenn kein Zusammenführungspunkt vorhanden ist. Andernfalls wird es früher beendet (am Zusammenführungspunkt).