C (gcc), 88 71 62 60 59 bytes
Saved 9 bytes thanks to ceilingcat!!!
Saved a byte thanks to G. Sliepen!!!
t;i;f(l,n)int*l;{for(;n>1;l[n]=t)t=*l,wmemcpy(l,l+1,n-=2);} Inputs a pointer to the array and its length and milks the array in place.
Code actually does the moo-shuffle: tucking the first element away, shifting all but the last down one, and putting the first one just in front of the last. This is repeated, shifting down 2 elements from the end each time, until there are only two elements left and we're done.