You are given the head of a singly linked-list. The list can be represented as:
L0 -> L1 -> ... -> Ln - 1 -> Ln
Reorder the list to be in the following form:
L0 -> Ln -> L1 -> Ln - 1 -> L2 -> Ln - 2 -> ...
You may not modify the values in the list's nodes. Only nodes themselves may be changed.
This problem combines multiple linked list techniques: finding the middle (fast & slow pointers), reversing the second half, and merging two lists. It's an excellent exercise in breaking down a complex problem into simpler sub-problems.
head = [1,2,3,4][1,4,2,3]head = [1,2,3,4,5][1,5,2,4,3]The number of nodes in the list is in the range [1, 5 * 10^4]1 <= Node.val <= 1000Click "Run" to execute your code against test cases
Socratic guidance - I'll ask questions, not give answers