Если у вас есть два списка уникальных предметов, и порядок не имеет значения, вы можете рассматривать их как наборы, а не списки
Если вы думаете о диаграмме Венна, со списком A в качестве одного круга и списком B в качестве другого, то пересечение этих двух является постоянным пулом.
Удалите все элементы в этом пересечении как из A, так и из B, и все, что осталось в A, было удалено, в то время как все, что осталось в B, было добавлено.
Итак, перебираем A для поиска каждого элемента в B. Если вы найдете его, удалите его из A и B
Тогда A - это список вещей, которые были удалены, а B - это список вещей, которые были добавлены
Я думаю ...
[edit] Хорошо, с новым ограничением «только 2 контейнера», то же самое сохраняется:
foreach( A ) {
if( eleA NOT IN B ) {
DELETED
}
}
foreach( B ) {
if( eleB NOT IN A ) {
ADDED
}
}
Тогда вы не создаете новый список и не уничтожаете свои старые ... но это займет больше времени, как в предыдущем примере, вы можете просто зациклить более короткий список и удалить элементы из более длинного. Здесь нужно сделать оба списка
Я бы сказал, что мое первое решение не использовало 4 контейнера, оно просто уничтожило два; -)