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