Reverse in groups of K nodes in a linked list
Given a pointer to the head of a Singly linked list, our objective is to reverse the linked list in groups of K nodes.
The algorithm is fairly simple, keep on reversing the linked list until k nodes are reversed or the linked list end.
As you can see in the above diagram:
After reversing A-B-C to C-B-A
A that was earlier the head of the k nodes group should now point to the next reversed k nodes head which is F.
To do this we have to first reverse the next k nodes and return its new head to link with A.
This can be achieved easily with recursive function calls, which would first reverse the next k nodes and then link it to the previous list's tail.
Exercise: Think of how would you perform reverse alternate k nodes in a linked list?
That is A-B-C-D-E-F-G-H will become C-B-A-D-E-F-H-G
I would give the solution in the next post.
--
Have any questions or suggestions? Post in the comments below!!
By,
Anubhav Shrimal
![]() |
| Reversing linked list in groups of 3 nodes |
Algorithm:
Reversing K nodes can use the reverse linked list algorithm we discussed in an earlier post.
Initialize: count = 0 current = head next = prev = None 1. while current does not become Null and count < k do: 2. reverse the linked list 3. end while 4. If there are further nodes left in the linked list 5. recursively call reverse linked list for next node 6. and store the returned value in head of the current call 7. return prev at each call as new head
The algorithm is fairly simple, keep on reversing the linked list until k nodes are reversed or the linked list end.
As you can see in the above diagram:
After reversing A-B-C to C-B-A
A that was earlier the head of the k nodes group should now point to the next reversed k nodes head which is F.
To do this we have to first reverse the next k nodes and return its new head to link with A.
This can be achieved easily with recursive function calls, which would first reverse the next k nodes and then link it to the previous list's tail.
Code in Python:
# Python program to reverse a linked list in group of given size k
# Node class
class Node:
# Constructor to initialise data and next
def __init__(self, data=None):
self.data = data
self.next = None
class SinglyLinkedList:
# Constructor to initialise head
def __init__(self):
self.head = None
# Function to reverse K nodes of linked list
def reverse_k_nodes(self, head, k):
current = head
next = None
prev = None
count = 0
# traverse k nodes ahead reversing the links or until current is not None
while current is not None and count < k:
next = current.next
current.next = prev
prev = current
current = next
count += 1
# recursive call to the function to reverse the remaining n-k nodes
if next is not None:
head.next = self.reverse_k_nodes(next, k)
# return the new header of the current sublist
return prev
# Function to Insert data at the beginning of the linked list
def insert_at_beg(self, data):
node = Node(data)
node.next = self.head
self.head = node
# Function to print the linked list
def print_data(self):
current = self.head
while current is not None:
print(current.data, '-> ', end='')
current = current.next
print('None')
linked_list = SinglyLinkedList()
linked_list.insert_at_beg(8)
linked_list.insert_at_beg(7)
linked_list.insert_at_beg(6)
linked_list.insert_at_beg(5)
linked_list.insert_at_beg(4)
linked_list.insert_at_beg(3)
linked_list.insert_at_beg(2)
linked_list.insert_at_beg(1)
linked_list.print_data()
# call the reverse k nodes function
linked_list.head = linked_list.reverse_k_nodes(linked_list.head, 3)
# print the reversed list
linked_list.print_data()
"""
Outputs:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> None
3 -> 2 -> 1 -> 6 -> 5 -> 4 -> 8 -> 7 -> None
"""
Exercise: Think of how would you perform reverse alternate k nodes in a linked list?
That is A-B-C-D-E-F-G-H will become C-B-A-D-E-F-H-G
I would give the solution in the next post.
--
Have any questions or suggestions? Post in the comments below!!
By,
Anubhav Shrimal

Comments
Post a Comment