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.