Reference: LeetCode EPI 7.2
Difficulty: Hard
Problem
Given a linked list, reverse the nodes of a linked list $k$ at a time and return its modified list.
$k$ is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of $k$ then left-out nodes in the end should remain as it is.
Note:
- Only 
constant extra memory$O(1)$ is allowed. - You may not alter the values in the list’s nodes, only nodes itself may be changed.
 
Example:
1  | Given this linked list: 1->2->3->4->5  | 
Analysis
Iteration
Calculate how many groups should be reversed. Reverse each group’s nodes.
1  | // 1 2 3 4 5 k =3  | 
1  | public ListNode reverseKGroup(ListNode head, int k) {  | 
Time: $O(N)$
Space: $O(1)$