first reverse the half of list, ref to others' elegant solution