Reverse alternate 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 alternate groups of K nodes.
The logic here is also the same, the only difference is that before the recursive call we traverse K more nodes so that we can skip them.
--
Have any questions or suggestions? Post in the comments below!!
By,
Anubhav Shrimal
![]() |
| Reversed alternate K nodes in a linked list |
Algorithm:
We discussed Reversing a linked list in groups of K nodes in the previous post.The logic here is also the same, the only difference is that before the recursive call we traverse K more nodes so that we can skip them.
"""
Perform the skip after reversing the previous k nodes
"""
count = 0
# traverse the k nodes to be skipped
while current is not None and count < k-1:
current = current.next
count += 1
Code in Python:
# Python program to alternately 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
if head is not None:
head.next = current
count = 0
# traverse the k nodes to be skipped
while current is not None and count < k-1:
current = current.next
count += 1
# recursive call to the function to alternate reverse the remaining n-2k nodes
if current is not None:
current.next = self.reverse_k_nodes(current.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(10)
linked_list.insert_at_beg(9)
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 -> 9 -> 10 -> None
3 -> 2 -> 1 -> 4 -> 5 -> 6 -> 9 -> 8 -> 7 -> 10 -> None
"""
Have any questions or suggestions? Post in the comments below!!
By,
Anubhav Shrimal

Comments
Post a Comment