Если оба списка отсортированы, то вы можете использовать следующий алгоритм (псевдокод, сложность времени выполнения O(n+m)
):
INPUT: list1, list2 (first nodes of the lists you want to compare, sorted!)
while list1 != null AND list2 != null
if list1->value < list2->value
list1->value = list1->next
elseif
list2->value < list1->value
list2->value = list2->next
else
list3->appendValue(list1->value)
list1->next
Если один из списков не отсортирован, вы должнысравнить каждый элемент из первого списка с каждым элементом во втором списке (сложность времени исполнения O(n*m)
):
INPUT: list1, list2 (first nodes of the lists you want to compare)
while list1 != null
list2temp = list2
while list2temp != null
if list1->value == list2temp->value
list3->appendValue(list1->value)
list2temp = list2temp->next
list1 = list1->next
Часто лучше сначала отсортировать списки, а затем использовать первый метод, это приведет ксложность во время выполнения O(n log n + m log m)
.В обоих случаях list3
будет содержать общие элементы обоих списков.