Table of Contents
Problem Statement:
Reverse Nodes in k-Group LeetCode Solution – Given the head of a linked list, reverse the nodes of the list k at a time, and return the 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.
You may not alter the values in the list’s nodes, only nodes themselves may be changed.
Example 1:
Input:
head = [1,2,3,4,5], k = 2
Output:
[2,1,4,3,5]
Example 2:
Input:
head = [1,2,3,4,5], k = 3
Output:
[3,2,1,4,5]
Constraints:
- The number of nodes in the list is
n. 1 <= k <= n <= 50000 <= Node.val <= 1000
Follow-up: Can you solve the problem in O(1) extra memory space?
ALGORITHM –
IDEA –
- In order to Reverse Nodes in k-Group LeetCode Solution. First, we will focus on how to reverse node in the k group so at first, we will count the total length of the linked list.
- Then we will reverse the linked list according to the given size ‘k’ and reverse the linked list.
- After that, we will decrease the total length by k and will check if the length of the linked list is greater than or equal to the size then we will repeat the previous steps by using recursion.
- Else we will link the linked list with the remaining node.
- Hence we will reverse the linked list in the k-group.
APPROACH –
- First, we will make a variable total(length of linked list). after that will count the total length by using the while loop.
- Then we will reverse the given linked list according to size – next – (next of current element), prev – ( previous element of current), and current.
- Then we will decrease the total length by k after reversing the linked list and will check if the total length will be greater or equal to k then we will do the previous steps by using recursion.
- Else will link to the remaining node of the linked list.
- At last, we will return to the prev.
Image –

class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
total = 0
current = head
while(current):
total += 1
current = current.next
prev = None
current = head
count = 0
while(current and count < k ):
next = current.next
current.next = prev
prev = current
current = next
count += 1
total -= k
if total >= k:
head.next = self.reverseKGroup(next,k)
else:
head.next = next
return prevclass Solution {
public ListNode reverseKGroup(ListNode head, int k) {
int total = 0;
ListNode current = head;
while(current != null){
total++;
current = current.next;
}
int count = 0;
ListNode prev = null;
ListNode c = head;
ListNode next = null;
while(c != null && count < k){
next = c.next;
c.next = prev;
prev = c;
c = next;
count++;
}
total -= k;
if(total >= k){
head.next = reverseKGroup(next,k);
}
else{
head.next = next;
}
return prev;
}
}Complexity Analysis for Reverse Nodes in k-Group LeetCode Solution
Time Complexity: O(N), As we have traversed the LinkedList three times.
Space Complexity: O(1), As we haven’t taken any extra space.
SIMILAR QUESTIONS – https://tutorialcup.com/leetcode-solutions/remove-nth-node-from-end-of-list-leetcode-solution.htm