Это полностью зависит от реализации, но если прямые списки реализованы с помощью того, что класс просто хранит указатель на первую и последнюю ячейки связанного списка, тогда swap может просто поменять эти два указателя. Так как списки с прямой связью не имеют обратных указателей, больше обновлений делать не нужно, и всю операцию можно выполнить в O (1).
Что касается обмена с итераторами, это фактически не обменивается ячейками связанного списка между двумя списками; он просто имеет первую точку итератора в ячейке, на которую ссылается второй итератор, и наоборот. Если вы хотите поменять местами значения, на которые указывают, то это можно сделать, просто изменив объекты в ячейках связанного списка, чтобы они меняли значения. Вам не нужно переписывать списки в любом случае.
Надеюсь, что поможет!