Может быть, я слишком упрощаю это, а просто перебираю наименьший список и использую последние узлы Link
как точку слияния?
Итак, где Data->Link->Link == NULL
находится конечная точка, указывается Data->Link
как точка слияния (в конце списка).
РЕДАКТИРОВАТЬ:
Хорошо, судя по опубликованной вами картинке, вы разбираете два списка, сначала самый маленький. С наименьшим списком вы можете поддерживать ссылки на следующий узел. Теперь, когда вы анализируете второй список, вы сравниваете ссылку, чтобы найти, где Reference [i] является ссылкой в LinkedList [i] -> Link. Это даст точку слияния. Пора объяснять картинками (наложите значения на картинку ОП).
У вас есть связанный список (ссылки показаны ниже):
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.
Конечно, вы ведете новый список указателей, но это не выходит за рамки спецификации. Однако первый список анализируется ровно один раз, а второй список будет полностью проанализирован только при отсутствии точки слияния. В противном случае он закончится раньше (в точке слияния).