Можливо, я над цим спрощую, але просто повторюю найменший список і використовую останні вузли Link
як точку злиття?
Отже, де Data->Link->Link == NULL
є кінцева точка, даючи Data->Link
як точку злиття (в кінці списку).
Редагувати:
Гаразд, з картинки, яку ви опублікували, ви розбираєте два списки, найменший перший. За допомогою найменшого списку ви можете підтримувати посилання на наступний вузол. Тепер, коли ви аналізуєте другий список, ви робите порівняння посилання, щоб знайти, де Reference [i] є посиланням на LinkedList [i] -> Посилання. Це дасть точку злиття. Час пояснити картинками (накладіть значення на малюнок ОП).
У вас пов'язаний список (посилання наведені нижче):
A->B->C->D->E
У вас є другий зв'язаний список:
1->2->
При злитому списку посилання йдуть наступним чином:
1->2->D->E->
Тому ви картографуєте перший "менший" список (оскільки об'єднаний список, який ми підраховуємо, має довжину 4 і основний список 5)
Проведіть цикл через перший список, підтримуйте посилання на посилання.
Список буде містити наступні посилання Pointers { 1, 2, D, E }
.
Зараз ми проходимо через другий список:
-> 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.
Звичайно, ви підтримуєте новий список покажчиків, але це не виходить за межі специфікації. Однак перший список аналізується рівно один раз, а другий список буде повністю розібраний лише тоді, коли немає точки злиття. В іншому випадку воно закінчиться швидше (у точці злиття).