Given a list l1 -> l2 -> ... -> ln-1 -> ln, produce a list l1 -> ln -> l2 -> ln-1 ...
Easy if you break the solution into manageable steps.
1) Find the midpoint of the list
2) Break into 2 lists from that midpoint
3) Reverse the second half
4) Merge the result
My solution in C#: