Reverse nodes in even-length linked-list groups
Company: TikTok
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
Quick Answer: This question evaluates proficiency with singly linked list manipulation, in-place group operations (including conditional group reversal based on group length), pointer handling, and reasoning about linear time and constant extra space constraints.
Constraints
- 1 <= n <= 10^5 (n = number of nodes); the test harness additionally allows the empty list for completeness.
- Node values can be any integers (including negatives); values do not affect the grouping/reversal logic.
- Target O(n) time and O(1) extra space (excluding any recursion stack).
Examples
Input: ([1, 2, 3, 4, 5, 6, 7, 8, 9],)
Expected Output: [1, 3, 2, 4, 5, 6, 7, 8, 9]
Explanation: Groups [1] | [2,3] | [4,5,6] | [7,8,9]. Only [2,3] is even (len 2) -> reversed to [3,2]. Last group length 3 is odd -> unchanged.
Input: ([5, 2, 6, 3, 9, 1, 7, 3, 8, 4],)
Expected Output: [5, 6, 2, 3, 9, 1, 4, 8, 3, 7]
Explanation: Groups [5] | [2,6] | [3,9,1] | [7,3,8,4]. [2,6] (len 2) -> [6,2]; [7,3,8,4] (len 4) -> [4,8,3,7]; odd groups unchanged.
Input: ([1, 1, 0, 6],)
Expected Output: [1, 0, 1, 6]
Explanation: Groups [1] | [1,0] | [6]. The second group [1,0] has even length 2 -> reversed to [0,1]. The final group [6] has length 1 (odd) -> unchanged.
Input: ([1, 1, 0, 6, 5],)
Expected Output: [1, 0, 1, 5, 6]
Explanation: Groups [1] | [1,0] | [6,5]. [1,0] even -> [0,1]; final group [6,5] actual length 2 is even -> reversed to [5,6].
Input: ([],)
Expected Output: []
Explanation: Empty list: nothing to process, return empty.
Input: ([7],)
Expected Output: [7]
Explanation: Single node forms the first group of length 1 (odd) -> unchanged.
Input: ([10, 20],)
Expected Output: [10, 20]
Explanation: Group 1 = [10] (len 1, odd). Group 2 intended size 2 but only one node [20] remains (actual len 1, odd). Both unchanged.
Input: ([-1, -2, -3],)
Expected Output: [-1, -3, -2]
Explanation: Groups [-1] | [-2,-3]. The second group has even length 2 -> reversed to [-3,-2]. Negatives don't affect the logic.
Input: ([4, 5, 6, 7],)
Expected Output: [4, 6, 5, 7]
Explanation: Groups [4] | [5,6] | [7]. [5,6] even -> [6,5]; final group [7] length 1 odd -> unchanged.
Hints
- Track the last node of the previously finalized group with a `prev` pointer (start with a dummy head). For each group, first walk forward up to `group_size` nodes to measure the group's ACTUAL length — it may be shorter than `group_size` for the final group.
- Only the actual length matters for parity. If it's even, reverse exactly that many nodes; if odd, just advance `prev` past them.
- When reversing a sublist of length `count`, point the reversed nodes so the group's new last node connects to the first node AFTER the group. After reversing, the original first node of the group becomes the group's tail — set `prev` to it before incrementing `group_size`.