আমরা একটি লিঙ্ক তালিকা দেওয়া হয়. তালিকাটি প্রথমে বাছাই করা হয় এবং তারপর নোডের K সংখ্যা দ্বারা ঘোরানো হয়। লক্ষ্য হল K-এর মান খুঁজে বের করা। যদি আমাদের ইনপুট হিসাবে নীচে লিঙ্কযুক্ত তালিকা দেওয়া হয় যা K নোডের সংখ্যা দ্বারা ঘোরানো হয় -
তাহলে আসল হতে হবে −
এবং আমরা দেখতে পাচ্ছি এখানে K হল 2। ইনপুট লিঙ্কড লিস্ট হল মূল সাজানো লিঙ্ক করা তালিকায় 2টি নোডের ঘূর্ণন।
আসুন উদাহরণ দিয়ে বুঝতে পারি।
ইনপুট − তালিকা :5 → 7 → 9 → 1 → 3
আউটপুট
লিঙ্ক করা তালিকার উপাদানগুলি হল:5 7 9 1 3
সাজানো এবং ঘোরানো লিঙ্ক তালিকায় ঘূর্ণনের সংখ্যা হল −3
ব্যাখ্যা − আমরা মূল সাজানো তালিকায় তিনটি ঘূর্ণনের পরে ইনপুট তালিকা পেতে পারি।
1 → 3 → 5 → 7 → 9, আসল9 → 1 → 3 → 5 → 7, ঘূর্ণন 17 → 9 → 1 → 3 → 5, ঘূর্ণন 25 → 7 → 9 → 1 → 3 ঘূর্ণন 3
ইনপুট − তালিকা − 17 → 25 → 62 → 99
আউটপুট
লিঙ্ক করা তালিকার উপাদানগুলি হল − 17 25 62 99
সাজানো এবং ঘোরানো লিঙ্ক তালিকায় ঘূর্ণনের সংখ্যা হল −4
ব্যাখ্যা − আমরা মূল সাজানো তালিকায় চারটি ঘূর্ণনের পরে ইনপুট তালিকা পেতে পারি।
17 → 25 → 62 → 99, আসল99 → 17 → 25 → 62, ঘূর্ণন 162 → 99 → 17 → 25, ঘূর্ণন 225 → 62 → 99 → 17, ঘূর্ণন 317 → 9 → 9 → 42 → ঘূর্ণন প্রাক>নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ
ইনপুট লিঙ্কড তালিকার একটি পয়েন্ট থাকবে যেখানে পরবর্তী নোডটি আগেরটির থেকে ছোট। যদি ইনপুট স্ট্রিংটিও সাজানো হয় তবে এটি আসলটির সম্পূর্ণ-ঘূর্ণন। হেড নোড থেকে শুরু করে, (বর্তমান নোডের ডেটা> হেড নোডের ডেটা) এবং বৃদ্ধির সংখ্যা পর্যন্ত অতিক্রম করুন। যেখানে (বর্তমান নোডের ডেটা <হেড নোডের ডেটা) লুপ ভেঙে দেয়। একটি ইনপুট তালিকা পেতে গণনার মূল তালিকায় অনেকগুলি ঘূর্ণন থাকবে৷
-
একটি ইনপুট তালিকা নিন এবং এতে উপাদান সন্নিবেশ করুন৷
-
ফাংশন insert_node(struct List_Node** head, int data) ডেটা সহ একক-লিঙ্কড তালিকার মাথায় নোড সন্নিবেশ করায়।
-
ফাংশন প্রিন্ট (struct List_Node* node) যখন লুপ ব্যবহার করে মাথা থেকে শুরু করে শেষ পর্যন্ত ইনপুট লিঙ্কড তালিকা প্রিন্ট করে।
-
ফাংশন ঘূর্ণন (struct List_Node* head) লিঙ্ক করা তালিকার প্রধান পয়েন্টার নেয় এবং ইনপুট লিঙ্কযুক্ত তালিকা পেতে মূল লিঙ্কযুক্ত তালিকায় করা ঘূর্ণনের গণনা ফেরত দেয়।
-
0 হিসাবে প্রাথমিক গণনা নিন।
-
টেম্প ভেরিয়েবলটিকে হেড নোডের ডেটা অংশ হিসাবে নিন।
-
যখন লুপ ব্যবহার করে, লিঙ্ক করা তালিকার শেষ না হওয়া পর্যন্ত অতিক্রম করুন। (মাথা!=শূন্য)।
-
প্রতিটি বর্তমান নোডের ডেটা তাপমাত্রার চেয়ে বেশি হলে সংখ্যা বৃদ্ধি।
-
যদি বর্তমান নোডের ডেটা হেড নোডের ডেটা (টেম্প) থেকে কম হয়। বিরতি,
-
আমরা ঘূর্ণনের সংখ্যা গণনা করব।
-
ফলাফল হিসাবে রিটার্ন গণনা।
উদাহরণ
#includeনেমস্পেস ব্যবহার করে std;struct List_Node{int data; struct List_Node* next;};int rotations(struct List_Node* head){int count =0; int temp =head->ডেটা; while (head !=NULL){ if (temp> head->data){ break; } গণনা++; head =head->পরবর্তী; } রিটার্ন কাউন্ট;} void insert_node(struct List_Node** head, int data){struct List_Node* new_node =new List_Node; নতুন_নোড->ডেটা =ডেটা; new_node->পরবর্তী =(*মাথা); (*head) =new_node;}void print(struct List_Node* node){ while (node !=NULL){ cout< data<<" "; নোড =নোড->পরবর্তী; }}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<<"লিঙ্ক করা তালিকার উপাদানগুলি হল:"; মুদ্রণ (মাথা); cout<<"\nবাছাই করা এবং ঘোরানো লিঙ্কযুক্ত তালিকায় ঘূর্ণনের সংখ্যা হল:"< আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেলিঙ্ক করা তালিকার উপাদানগুলি হল:28 35 18 1 2 বাছাই করা এবং ঘোরানো লিঙ্কযুক্ত তালিকায় ঘূর্ণনের সংখ্যা হল:2