In that case, you need to clarify the problem with whoever gave it to you. Using a fixed index on each iteration results in a cycle.
ClearAll@flipIt
flipIt[l_List, pos_Integer] := Reverse@l[[1 ;; pos]]~Join~l[[pos + 1 ;;]] // Reverse
Test that the first iteration reproduces the list in the question
flipIt[tl, 3]
(* {4, 1, 3, 2, 5} *)
Repeat until a cycle is detected
f = NestWhileList[flipIt[#, 3] &, #, Unequal, All] &
f@tl
(* {{3, 2, 5, 1, 4}, {4, 1, 3, 2, 5}, {5, 2, 4, 1, 3}, {3, 1, 5, 2, 4}, {4, 2, 3, 1, 5}, {5, 1, 4, 2, 3}, {3, 2, 5, 1, 4}} *)
The initial list has been repeated and will continue to repeat in the same cycle.
You can modify the code to see what happens if the "cut" position is based on value rather than index.