If we know the total number of element in the list, then prepare two list half and half.
First Half :- 1->2->3
Second Half -> 4->5
Then Reverse the second which will be 5->4;
Then you can merge the list with first list pointer moving each time two times, and second pointer one time.
O(1) space is nothing but constant space, so you are allocating just some pointers to reverse the linked list and one pointer to point the new list .