Avevo 5 minuti e mi è venuta voglia di scrivere un po' di codice
Io lo farei così:
codice:
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class Main
{
private static <T> Collection<T> mergeCollection(List<T> list1, List<T> list2)
{
Collection<T> mergedCollection = new LinkedList<T>();
ListIterator<T> iterator1 = list1.listIterator();
ListIterator<T> iterator2 = list2.listIterator(list2.size());
int maxSize = Math.max(list1.size(), list2.size());
for (int i = 0; i < maxSize; i++)
{
if (iterator1.hasNext())
{
mergedCollection.add(iterator1.next());
}
if (iterator2.hasPrevious())
{
mergedCollection.add(iterator2.previous());
}
}
return mergedCollection;
}
public static void main(String args[])
{
LinkedList<Integer> list1 = new LinkedList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(10);
list1.add(11);
list1.add(12);
LinkedList<Integer> list2 = new LinkedList<Integer>();
list2.add(4);
list2.add(5);
list2.add(6);
System.out.println(Main.<Integer> mergeCollection(list1, list2));
}
}
Itero sulla lunghezza della lista più lunga e ad ogni iterazione aggiungo un elemento dalla prima lista e un elemento dalla seconda lista. Usando hasNext e hasPrevious gestisco in automatico il caso in cui una delle due liste è più lunga: in quel caso aggiungo in coda gli elementi della lista più lunga.