
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Reverse a Linked List in groups of a Given Size using C++
In this article, we deal with a singly linked list, and the task is to reverse the list in groups of k. For example −
Input: 1->2->3->4->5->6->7->8->NULL, K = 3 Output: 3->2->1->6->5->4->8->7->NULL Input: 1->2->3->4->5->6->7->8->NULL, K = 5 Output: 5->4->3->2->1->8
For this problem, one approach that comes to mind is trailing the list and reversing the list when our sublist’s size reaches k and continues.
Approach to find The Solution
In this approach, we will generally traverse through the list and keep a counter to count the number of elements in our sub-list. When the counter reaches the count of k, we reverse that part.
Example
#include <bits/stdc++.h> using namespace std; class Node { public: int data; Node* next; }; Node* reverse(Node* head, int k) { if (!head) return NULL; Node* curr = head; Node* next = NULL; Node* prev = NULL; int count = 0; while (curr != NULL && count < k) { // we reverse the list till our count is less than k next = curr->next; curr->next = prev; prev = curr; curr = next; count++; } if (next != NULL) // if our link list has not ended we call reverse function again head->next = reverse(next, k); return prev; } void push(Node** head_ref, int new_data) { // function for pushing data in the list Node* new_node = new Node(); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node; } void printList(Node* node) { // function to print linked list while (node != NULL) { cout << node->data << " "; node = node->next; } cout << "\n"; } int main() { Node* head = NULL; int k = 3; // the given k push(&head, 8); push(&head, 7); push(&head, 6); push(&head, 5); push(&head, 4); push(&head, 3); push(&head, 2); push(&head, 1); cout << "Original list \n"; printList(head); head = reverse(head, k); // this function will return us our new head cout << "New list \n"; printList(head); return (0); }
Output
Original list 1 2 3 4 5 6 7 8 New list 3 2 1 6 5 4 8 7
The above approach has a time complexity of O(N), where N is the size of our given list, and this approach works on recursion. This approach can work for higher constraints as well.
Explanation of the above code
We will traverse through the array in this approach and keep reversing it till our counter variable is less than k. When our counter reaches the value of k, we call another reversing function to connect the last node of this sub-list to the first node of the next reversed sub-list. This is being done by recursion.
Conclusion
In this article, we solve a problem to Reverse a Linked List in groups of a given size using recursion. We also learned the C++ program for this problem and the complete approach ( Normal) by which we solved this problem. We can write the same program in other languages such as C, java, python, and other languages. We hope you find this article helpful.
- Related Articles
- Reverse a Doubly-Linked List in Groups of a Given Size using C++
- JavaScript Program For Reversing A Linked List In Groups Of Given Size
- Program to reverse linked list by groups of size k in Python
- Reverse a Linked List using C++
- Reverse a Doubly Linked List using C++
- Golang Program to reverse a given linked list.
- Print Reverse a linked list using Stack
- C Program for Reverse a linked list
- Java program to reverse an array in groups of given size
- Python program to reverse an array in groups of given size?
- Reverse Linked List II in C++\n
- An interesting method to print reverse of a linked list in C++
- Print reverse of a Linked List without actually reversing in C language
- Reverse Alternate K Nodes in a Singly Linked List in C++
- How to Reverse a linked list in android?
