কম্পিউটার

C++ ব্যবহার করে একটি প্রদত্ত আকারের গোষ্ঠীতে একটি দ্বিগুণ-লিঙ্কযুক্ত তালিকা বিপরীত করুন


এই সমস্যায়, আমাদেরকে লিঙ্ক করা তালিকার মাথায় একটি পয়েন্টার এবং একটি পূর্ণসংখ্যা k দেওয়া হয়। k আকারের গোষ্ঠীতে, আমাদের লিঙ্ক করা তালিকাটিকে উল্টাতে হবে। যেমন −

ইনপুট :1 <-> 2 <-> 3 <-> 4 <-> 5 (দ্বিগুণ লিঙ্কযুক্ত তালিকা), k =3 আউটপুট :3 <-> 2 <-> 1 <-> 5 <-> 4 

সমাধান খোঁজার পদ্ধতি

এই সমস্যাটিতে, আমরা এই সমস্যাটি সমাধান করার জন্য একটি পুনরাবৃত্ত অ্যালগরিদম তৈরি করতে যাচ্ছি। এই পদ্ধতিতে, আমরা পুনরাবৃত্তি ব্যবহার করতে যাচ্ছি এবং এটি ব্যবহার করে সমস্যার সমাধান করতে যাচ্ছি।

উদাহরণ

#include  namespace ব্যবহার করে std;struct Node {int data; নোড *next, *prev;};// পুশ ফাংশন একটি নোডকে লিস্টে ঠেলে দিতে নোড* পুশ(নোড* হেড, int ডেটা) { নোড* new_node =new Node(); নতুন_নোড->ডেটা =ডেটা; new_node->পরবর্তী =NULL; নোড* TMP =মাথা; if (head ==NULL) { new_node->prev =NULL; head =new_node; মাথা ফেরত; } যখন (TMP->পরবর্তী!=NULL) {// শেষ নোডে যাচ্ছেন TMP =TMP->পরবর্তী; } TMP->পরবর্তী =new_node; new_node->prev =TMP; মাথা ফেরত; // পয়েন্টারে হেড ফেরত দিন}// প্রিন্ট করার জন্য ফাংশন প্রদত্ত listvoid printDLL(নোড* head) { যখন (head !=NULL) { cout <data <<" "; head =head->next;}cout <prev =NULL; নোড *TMP, *CURRENT =head, *newHead; int count =0; যখন (বর্তমান !=NULL &&গণনা পূর্ববর্তী; CURRENT->prev =CURRENT->পরবর্তী; CURRENT->পরবর্তী =TMP; CURRENT =CURRENT->পূর্ববর্তী; গণনা++; } যদি (গণনা>=কে) { হেড->পরবর্তী =revK(বর্তমান, কে); // এখন যখন গণনা বেশি বা সমান // k থেকে আমরা প্রথম হেডকে পরবর্তী হেডের সাথে সংযুক্ত করি } রিটার্ন newHead;}int main() { Node* head; জন্য (int i =1; i <=5; i++) { head =push(head, i); } cout <<"মূল তালিকা :"; printDLL(হেড); cout <<"\nপরিবর্তিত তালিকা :"; int k =3; head =revK(head, k); printDLL(head);}

আউটপুট

মূল তালিকা :1 2 3 4 5 পরিবর্তিত তালিকা :3 2 1 5 4

উপরের কোডের ব্যাখ্যা

এই পদ্ধতিতে, আমরা তালিকার মধ্য দিয়ে অতিক্রম করছি এবং আমাদের গণনা k এর থেকে কম না হওয়া পর্যন্ত অতিক্রম করছি। আমরা করি এবং রিকার্সিভ কল করে সেই মানটিকে হেড -> পরবর্তী (এখানে আমরা তালিকাটি উল্টে দিচ্ছি যেভাবে আমরা যাচ্ছি, কিন্তু যখন আমাদের k পৌঁছে যায়, তখন আমাদের মাথাকে অন্য একটি তালিকার kth উপাদানের দিকে নির্দেশ করতে হবে, উদাহরণস্বরূপ, যদি আমাদের তালিকা হল 1 2 3 4 5 এবং আমাদের k হল 3 এতে আমরা মধ্যবর্তী উপাদানগুলিকে 3 2 1 এ উল্টে দিই কিন্তু এখন আমাদের 4 এ নির্দেশ করতে আমাদের 1 প্রয়োজন কারণ সেই উপাদানটিও বিপরীত হতে চলেছে, তাই আমরা ব্যবহার করছি পুনরাবৃত্ত কল এবং একটি অতিরিক্ত ইফ স্টেটমেন্ট তৈরি করা।।

উপসংহার

এই নিবন্ধে, আমরা পুনরাবৃত্তি ব্যবহার করে একটি প্রদত্ত আকারের গোষ্ঠীতে একটি দ্বিগুণ-লিঙ্কযুক্ত তালিকাকে উল্টাতে একটি সমস্যার সমাধান করি . আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং আমরা যে সম্পূর্ণ পদ্ধতির সমাধান করেছি তাও শিখেছি। আমরা অন্যান্য ভাষা যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি। আমরা আশা করি আপনার এই নিবন্ধটি সহায়ক হবে৷


  1. C++ STL-এ বিপরীত ফাংশন তালিকাভুক্ত করুন

  2. C++ এ পুনরাবৃত্তি ব্যবহার করে লিঙ্ক করা তালিকার বিকল্প নোড প্রিন্ট করুন

  3. Python-এ k আকারের গ্রুপ দ্বারা লিঙ্ক করা তালিকাকে বিপরীত করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম প্রদত্ত আকারের গ্রুপে একটি অ্যারে বিপরীত করতে?