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)$