- Related Questions & Answers
- Find the Rotation Count in Rotated Sorted array in C++
- Maximum element in a sorted and rotated array in C++
- Check if an array is sorted and rotated in C++
- Find Minimum in Rotated Sorted Array in C++
- Search in Rotated Sorted Array II in C++
- Insert into a Sorted Circular Linked List in C++
- Find Minimum in Rotated Sorted Array II in C++
- C++ Program to Implement Sorted Doubly Linked List
- C++ Program to Implement Sorted Singly Linked List
- Count rotations divisible by 8 in C++
- Count rotations divisible by 4 in C++
- Count nodes in Circular linked list in C++
- Search in Rotated Sorted Array in Python
- Check if a Linked List is Pairwise Sorted in C++
- Check if an array is sorted and rotated in Python

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

We are given a linked list. The list is sorted first and then rotated by K number of nodes. The goal is to find the value of K. If we are given below linked list as input which is rotated by K number of nodes −

Then original must have been −

And we can see K here is 2. Input linked list is a rotation of 2 nodes in the original sorted linked list.

Let us understand with examples.

**Input** − List : 5 → 7 → 9 → 1 → 3

**Output**

Elements in the linked list are: 5 7 9 1 3

Count of rotations in sorted and rotated linked list are − 3

**Explanation** − We can get the input list after three rotations in the original sorted list.

1 → 3 → 5 → 7 → 9, original 9 → 1 → 3 → 5 → 7, rotation 1 7 → 9 → 1 → 3 → 5, rotation 2 5 → 7 → 9 → 1 → 3 rotation 3

**Input** − List − 17 → 25 → 62 → 99

**Output**

Elements in the linked list are − 17 25 62 99

Count of rotations in sorted and rotated linked list are − 4

**Explanation**− We can get the input list after four rotations in the original sorted list.

17 → 25 → 62 → 99, original 99 → 17 → 25 → 62, rotation 1 62 → 99 → 17 → 25, rotation 2 25 → 62 → 99 → 17, rotation 3 17 → 25 → 62 → 99, rotation 4

The input Linked list would have one point at which the next node is smaller than the previous one. If the input string is also sorted then it is full-rotation of the original one. Starting from the head node, traverse till the (current node's data > head node’s data) and increment count. In case where (current node's data < head node’s data) break the loop. The count will have a number of rotations in the original list to get an input list.

Take an input list and insert elements in it.

Function insert_node(struct List_Node** head, int data) inserts nodes at the head of singly-linked lists with data.

Function print(struct List_Node* node) prints the input Linked list starting from head till the end using while loop.

Function rotations(struct List_Node* head) take the head pointer of the linked list and return the count of rotations done in the original linked list to get the input linked list.

Take the initial count as 0.

Take the temp variable as the data part of the head node.

Using while loop, traverse till the end of the linked list is reached. (head!=NULL).

Increment count in case every current node’s data is greater than temp.

In case the current node’s data is less than the head node’s data ( temp). Break,

We will count the number of rotations.

Return count as result.

#include <bits/stdc++.h> using namespace std; struct List_Node{ int data; struct List_Node* next; }; int rotations(struct List_Node* head){ int count = 0; int temp = head->data; while (head != NULL){ if (temp > head->data){ break; } count++; head = head->next; } return count; } void insert_node(struct List_Node** head, int data){ struct List_Node* new_node = new List_Node; new_node->data = data; new_node->next = (*head); (*head) = new_node; } void print(struct List_Node* node){ while (node != NULL){ cout<<node->data<<" "; node = node->next; } } int main(){ struct List_Node* head = NULL; insert_node(&head, 2); insert_node(&head, 1); insert_node(&head, 18); insert_node(&head, 35); insert_node(&head, 28); cout<<"Elements in the linked list are: "; print(head); cout<<"\nCount of rotations in sorted and rotated linked list are: "<<rotations(head); return 0; }

If we run the above code it will generate the following output −

Elements in the linked list are: 28 35 18 1 2 Count of rotations in sorted and rotated linked list are: 2

Advertisements