Może zbytnio to upraszczam, ale po prostu powtarzam najmniejszą listę i używam ostatnich węzłów Link
jako punktu scalania?
Tak więc, gdzie Data->Link->Link == NULL
jest punktem końcowym, podając Data->Link
jako punkt łączenia (na końcu listy).
EDYTOWAĆ:
OK, z opublikowanego zdjęcia analizujesz dwie listy, najpierw najmniejszą. Przy najmniejszej liście możesz zachować odniesienia do następnego węzła. Teraz, kiedy analizujesz drugą listę, wykonujesz porównanie referencji, aby znaleźć referencję [i] w LinkedList [i] -> Link. To da punkt scalenia. Czas wyjaśnić zdjęciami (nałożyć wartości na obraz PO).
Masz połączoną listę (referencje pokazane poniżej):
A->B->C->D->E
Masz drugą połączoną listę:
1->2->
Po połączeniu listy odwołania wyglądałyby następująco:
1->2->D->E->
Dlatego mapujesz pierwszą „mniejszą” listę (ponieważ lista połączona, czyli to, co liczymy, ma długość 4, a lista główna 5)
Przejrzyj pierwszą listę, zachowaj referencje referencji.
Lista będzie zawierać następujące odniesienia Pointers { 1, 2, D, E }
.
Teraz przejdziemy przez drugą listę:
-> 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.
Jasne, utrzymujesz nową listę wskaźników, ale to nie jest poza specyfikacją. Jednak pierwsza lista jest analizowana dokładnie raz, a druga lista zostanie w pełni przeanalizowana tylko wtedy, gdy nie ma punktu scalania. W przeciwnym razie zakończy się wcześniej (w punkcie scalenia).