Po pierwsze, czytaj i staraj się zrozumieć błędy zwracane przez program.
Po drugie, czytaj dokumentacje używanych przez Ciebie komponentów.
Metoda listIterator zwraca obiekt ListIterator typu elementu wywołującej jej listy - w tym przypadku String.
ListIterator<String>
Obiekt ListIterator zawiera następujące metody:
https://www.tutorialspoint.com/java/java_using_iterator.htm
Teraz, gdy zaznajomimy się z działaniem każdej z metod możemy wywnioskować, że będziemy potrzebować kolejno hasNext, add i next.
No więc tworzymy pętle:
while(iterator.hasNext()) {
...
}
Wewnątrz pętli chcemy dodać elementy listy "B".
Instrukcja, którą próbowałeś, A.add(B) nie zadziałała, gdyż A jest typu ArrayList a jej metoda add przyjmuje argumenty element typu String oraz opcjonalnie index typu Int podczas gdy próbujesz dodać element typu ArrayList<String> (patrz typ zmiennej B).
Gdybyś zrozumiał błąd, który program Ci zwrócił, wiedziałbyś o tym.
Będąc wzbogaconym o tę wiedzę, możemy przystąpić do solucji.
Zacznijmy od mniej eleganckiej wersji:
...
ListIterator<String> bIterator = B.listIterator();
while(iterator.hasNext()) {
while (bIterator.hasNext()) {
iterator.add(bIterator.next());
}
iterator.next(); // Zalecam jednak wykonanie instrukcji "break" w tym przypadku. Output ten sam, natomiast program zyska na optymalizacji a iterator nadal jest w grze.
}
Wiemy, że B ma elementy tego samego typu co A, więc metoda A.add(elementB) zadziała. Stąd, jeżeli chcemy wykazać się fanatyzmem dla podejścia z użyciem iteratorów, tworzymy bIterator a następnie przypisujemy elementy bIterator do iterator (Sugerowałbym nazwy bIterator i aIterator, ale to inna sprawa).
Powyższy program zadziała.
Teraz czas na solucję bardziej elegancką, przy okazji podkreślającą, że znajomość dokumentacji obiektów z którymi pracujemy jest istotna.
Zapoznawszy się z dokumentacją obiektu ArrayList wiem, że zawiera ona metodę addAll((Collection(? Extends E) c). Znając typy listy A i B oraz wymagany typ parametru c metody addAll wiemy, że poniższy kod zadziała:
...
B.add("C");
B.add("D");
A.addAll(B);
System.out.println(A);
Link do dokumentacji: https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Z resztą zadań zostawiam Cię sam, jestem pewny, że uda Ci się rozwiązać resztę zadań, jeśli podejdziesz do tematu z chęcią zgłębienia pisanych przez siebie programów i używanych przez niego zasobów jak biblioteka java.
EDIT
Kolega Subtelny podsunął mi, że trafniejszym rozwiązaniem tego problemu jest program poniżej:
List<String> A = new ArrayList<>();
A.add("1");
A.add("2");
A.add("3");
A.add("4");
List<String> B = new ArrayList<>();
B.add("A");
B.add("B");
B.add("C");
B.add("D");
ListIterator<String> bListIterator = B.listIterator();
bListIterator.forEachRemaining(A::add);
System.out.println(Arrays.toString(A.toArray()));
Metoda forEachRemaining: https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
Usunięcie elementów iteratora B z elementów listy A pozostawiam jako ćwiczenie, co powinno być prostsze z tym rozwiązaniem.