ধরুন আমরা একটি লিঙ্ক তালিকা আছে. আমাদের তালিকাটি ডানদিকে k স্থান দ্বারা ঘোরাতে হবে। k এর মান ধনাত্মক হবে। তাই যদি তালিকাটি [1 −> 2 −> 3 −> 4 −> 5 −> NULL], এবং k =2, তাহলে আউটপুট হবে [4 −> 5 −> 1 −> 2 −> 3 −> NULL
আসুন ধাপগুলো দেখি -
-
যদি তালিকাটি খালি থাকে, তাহলে শূন্য ফেরত দিন
-
len :=1
-
tail :=head
নামে একটি নোড তৈরি করুন -
যখন লেজের পাশের অংশটি শূন্য নয়
-
লেন 1 দ্বারা বাড়ান
-
পুচ্ছ :=লেজের পাশে
-
-
লেজের পাশে :=মাথা
-
k :=k mod len
-
নতুন হেড :=শূন্য
-
i এর জন্য :=0 থেকে len − k
-
পুচ্ছ :=লেজের পাশে
-
-
newHead :=লেজের পাশে
-
লেজের পাশে :=শূন্য
-
রিটার্ন নতুন হেড
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#includeনেমস্পেস ব্যবহার করে std;class ListNode{ public:int val; ListNode *পরবর্তী; ListNode(int data){ val =data; পরবর্তী =NULL; }};লিস্টনোড *make_list(ভেক্টর v){ ListNode *head =new ListNode(v[0]); for(int i =1; i পরবর্তী!=NULL){ ptr =ptr->পরবর্তী; } ptr->next =নতুন ListNode(v[i]); } রিটার্ন হেড;} void print_list(ListNode *head){ ListNode *ptr =head; cout <<"["; while(ptr->পরবর্তী){ cout < val <<", "; ptr =ptr->পরবর্তী; } cout <<"]" < পরবর্তী){ len++; tail =tail->পরের; } লেজ->পরবর্তী =মাথা; k % =len; ListNode* newHead =NULL; for(int i =0; i পরের; } newHead =tail->পরের; tail->পরবর্তী =NULL; নতুন হেড ফেরত; }};প্রধান(){সমাধান ob; ভেক্টর v ={1,2,3,4,5,6,7,8,9}; ListNode *head =make_list(v); print_list(ob.rotateRight(head, 4));}
ইনপুট
<প্রে>[1,2,3,4,5,6,7,8,9], 4আউটপুট
[6, 7, 8, 9, 1, 2, 3, 4, ]