Break the problem into three steps.
First, find the middle of the list using slow/fast pointers.
Second, reverse the second half of the list.
Third, merge the two halves by alternating nodes. Take one from the first half, one from the reversed second half, repeat.
Each step uses techniques you already know: finding the middle, reversing a list, and merging two lists.