The time complexity is O(n^2).
The loop will execute floor(n/2) times. List.add(int i) and list.remove(int i) are both O(n) on average(see the notes on why below). This results in O(n*n/2) which is O(n^2).
Some notes on built in List implementations
When calling List.add(int i, element) or List.remove(int i) on an ArrayList, elements in the list must be shifted to insert or remove an element(when not at the end of the list) On average the number of shifts necessary is n. Thus the add and remove operations are both O(n).
List.add(int i, element) and List.remove(int i) are also O(n) when called on a LinkedList. This is due to the need to traverse to the given index in order to remove/add an element.
We can do better when we know that adds/remove to a given List will be sequential.
A ListIterator, using a LinkedList, can be used to reduce the time complexity to O(n). The add and remove methods are O(1) when invoked on a LinkedLists ListIterator as there's no need to traverse to the given index.
Sample implementation of the askers method using ListIterator
public static void mystery(List<String> list){
ListIterator<String> iterator = list.listIterator();
int i = 0;
while (i < list.size()-1) {
String first = iterator.next();
// Remove first
iterator.remove();
// Skip an element
iterator.next();
// insert at i+1
iterator.add(first);
i+=2;
}
}