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 on 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.
Example 1:
Input: head = [1,2,3,4] Output: [1,4,2,3]
Example 2:
Input: head = [1,2,3,4,5] Output: [1,5,2,4,3]
Constraints: The number of nodes in the list is in the range [1, 5 * 104]. 1 <= Node.val <= 1000
/** * @param {ListNode} head * @return {void} Do not return anything, modify head in-place instead. */ var reorderList = function(head) { if (!head || !head.next) return; let fast = head; let slow = head; while (fast && fast.next) { fast = fast.next.next; slow = slow.next; } let second = reverseList(slow.next); slow.next = null; let first = head; while (second) { let temp = second.next; second.next = first.next; first.next = second; first = first.next.next; second = temp; } };
var reverseList = function(head) { let pre = null; while (head !== null) { let next = head.next; head.next = pre; pre = head; head = next; } return pre; };