কম্পিউটার

C++ এ লিঙ্ক করা তালিকার M নোডের পরে N নোড মুছে ফেলবেন?


আসুন প্রথমে আমাদের লিঙ্ক করা তালিকাটি সংজ্ঞায়িত করি যাতে ডেটা এবং পরবর্তী নোডের পয়েন্টার রয়েছে।

struct Node {
   int data;
   struct Node* next;
};

তারপরে আমরা আমাদের createList(Node ** headPtr, int new_data) ফাংশন তৈরি করি যা নোডে একটি ডাবলপয়েন্টার এবং একটি int মান নেয়। ফাংশনের ভিতরে আমরা নতুন তৈরি করা নোডকে হেডপিটারের পরবর্তী পয়েন্টার এবং তারপর নতুন তৈরি নোডে হেডপিটিআর বরাদ্দ করি।

void createList(Node ** headPtr, int new_data){
   Node* newNode = new Node();
   newNode->data = new_data;
   newNode->next = (*headPtr);
   (*headPtr) = newNode;
}

deleteNnodesAfterM(Node *head, int M, int N) পদ্ধতি রুট নোড এবং M এবং N মান নেয়। ভিতরে আমরা মাথায় নোড* কারেন্ট বরাদ্দ করি এবং নোড *টি ঘোষণা করি।

void deleteNnodesAfterM(Node *head, int M, int N){
   Node *current = head, *t;
   int nodeCount;

ফাংশনের ভিতরে আমাদের একটি while লুপ আছে যেটি চলে যখন কারেন্ট নালকে নির্দেশ করে না। লুপের জন্য প্রথমটি M পুনরাবৃত্তির জন্য চলে। প্রথম ফর লুপের পরে বর্তমান কার্যকর করা শেষ পয়েন্টার লিঙ্ক করা তালিকায় M এর পরে নোডের দিকে নির্দেশ করে। তারপরে নোড *t-কে বর্তমান মান নির্ধারণ করা হয়->পরে যেটি প্রথম মানটি মুছে ফেলা হবে।

while (current){
   for (nodeCount = 1; nodeCount < M && current!= NULL; nodeCount++)
   current = current->next;
   if (current == NULL)
      return;
   t = current->next;

লুপের জন্য দ্বিতীয়টি N পুনরাবৃত্তির জন্য সঞ্চালিত হয় এবং শুরুর অবস্থান থেকে N নম্বর নোডকে মুক্ত করে। বর্তমান->পরবর্তীটি তারপরে টি-কে বরাদ্দ করা হয় এবং টি আমাদের বর্তমান নোডে পরিণত হয়।

for (nodeCount = 1; nodeCount<=N && t!= NULL; nodeCount++){
   Node *temp = t;
   t = t->next;
   free(temp);
}
current->next = t;
current = t;

অবশেষে, প্রিন্টলিস্ট (নোড *হেড) যেটি হেড পয়েন্টার নেয় লিঙ্ক করা তালিকা প্রিন্ট করে।

void printList(Node *head){
   Node *temp = head;
   while (temp != NULL){
      cout<<temp->data<<" ";
      temp = temp->next;
   }
   cout<<endl;
}

উদাহরণ

একটি লিঙ্ক করা তালিকার M নোডের পরে N নোডগুলি মুছে ফেলার জন্য নিম্নলিখিত বাস্তবায়নটি দেখি -

#include <iostream>
using namespace std;
struct Node{
   int data;
   Node *next;
};
void createList(Node ** headPtr, int new_data){
   Node* newNode = new Node();
   newNode->data = new_data;
   newNode->next = (*headPtr);
   (*headPtr) = newNode;
}
void printList(Node *head){
   Node *temp = head;
   while (temp != NULL){
      cout<<temp->data<<" ";
      temp = temp->next;
   }
   cout<<endl;
}
void deleteNnodesAfterM(Node *head, int M, int N){
   Node *current = head, *t;
   int nodeCount;
   while (current){
      for (nodeCount = 1; nodeCount < M && current!= NULL; nodeCount++)
      current = current->next;
      if (current == NULL)
      return;
      t = current->next;
      for (nodeCount = 1; nodeCount<=N && t!= NULL; nodeCount++){
         Node *temp = t;
         t = t->next;
         free(temp);
      }
      current->next = t;
      current = t;
   }
}
int main(){
   Node* head = NULL;
   int M=2, N=2;
   createList(&head, 2);
   createList(&head, 4);
   createList(&head, 6);
   createList(&head, 8);
   createList(&head, 10);
   createList(&head, 12);
   createList(&head, 14);
   cout << "M = " << M<< " N = " << N<<endl;
   cout<< "Original linked list :"<<endl;
   printList(head);
   deleteNnodesAfterM(head, M, N);
   cout<<"Linked list after deletion :"<<endl;
   printList(head);
   return 0;
}

আউটপুট

উপরের কোডটি নিম্নলিখিত আউটপুট −

তৈরি করবে
M = 2 N = 2

Original linked list :
14 12 10 8 6 4 2

Linked list after deletion :
14 12 6 4

  1. C++ এ বহুস্তরের লিঙ্কযুক্ত তালিকা সমতল করুন

  2. C++ এ সার্কুলার লিঙ্কড লিস্টের নোডের সমষ্টি

  3. C++ এ সার্কুলার লিঙ্ক তালিকায় নোড গণনা করুন

  4. পাইথনে লিঙ্ক করা তালিকা থেকে m নোডের পরে n নোড মুছে ফেলার প্রোগ্রাম