কম্পিউটার

C++ এ লিঙ্ক করা তালিকার মাঝখানে মুছে ফেলবেন?


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

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

এর পরে আমরা আমাদের createNode(int data) ফাংশন তৈরি করি যা int ডেটাকে প্যারামিটার হিসাবে নেয় এবং প্যারামিটার মান নির্ধারণ করার পরে নতুন তৈরি নোডটি ফেরত দেয়। নোডের পরবর্তী পয়েন্টারটি শূন্য হবে।

Node* createNode(int data){
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->next = NULL;
   return newNode;
}

এখন আমাদের deleteMiddle(struct Node* head) ফাংশন আছে যা রুট নোড নেয়। যদি রুট নোডটি শূন্য না হয় তবে এটি কেবল মধ্যম মানের পাশের নোডে নোডের আগের থেকে মধ্যম মানের পরবর্তী মান নির্ধারণ করে এবং টেম্পহেডটি ফেরত দেয় যা পরিবর্তিত হেড।

struct Node* deleteMiddle(struct Node* head){
   if (head == NULL)
      return NULL;
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   Node* temphead = head;
   int count = nodeCount(head);
   int mid = count / 2;
   while (mid-- > 1) {
      head = head->next;
   }
   head->next = head->next->next;
   return temphead;
}

অবশেষে আমাদের প্রিন্টলিস্ট (নোড *ptr) ফাংশন রয়েছে যা তালিকার প্রধানটি নেয় এবং তালিকাটি প্রিন্ট করে।

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

উদাহরণ

আসুন এককভাবে লিঙ্ক করা তালিকার মাঝখানে মুছে ফেলার নিম্নলিখিত বাস্তবায়ন দেখি।

#include <iostream>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
Node* createNode(int data){
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->next = NULL;
   return newNode;
}
int nodeCount(struct Node* head){
   int count = 0;
   while (head != NULL) {
      head = head->next;
      count++;
   }
   return count;
}
struct Node* deleteMiddle(struct Node* head){
   if (head == NULL)
      return NULL;
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   Node* temphead = head;
   int count = nodeCount(head);
   int mid = count / 2;
   while (mid-- > 1) {
      head = head->next;
   }
   head->next = head->next->next;
   return temphead;
}
void printList(Node * ptr){
   while (ptr!= NULL) {
      cout << ptr->data << "->";
      ptr = ptr->next;
   }
   cout << "NULL"<<endl;
}
int main(){
   struct Node* head = createNode(2);
   head->next = createNode(4);
   head->next->next = createNode(6);
   head->next->next->next = createNode(8);
   head->next->next->next->next = createNode(10);
   cout << "Original linked list"<<endl;
   printList(head);
   head = deleteMiddle(head);
   cout<<endl;
   cout << "After deleting the middle of the linked list"<<endl;
   printList(head);
   return 0;
}

আউটপুট

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

তৈরি করবে
Original linked list
2->4->6->8->10->NULL

After deleting the middle of the linked list
2->4->8->10->NULL

  1. C++ এ একটি লিঙ্কযুক্ত তালিকা সমতল করা

  2. সি++ এ বারবার এককভাবে লিঙ্ক করা তালিকার মাঝখানে খুঁজুন

  3. C++ এ লিঙ্কড তালিকার বিকল্প বাছাই

  4. C++ এ লিঙ্কড লিস্ট ব্যবহার করে দুটি বহুপদ যোগ করা হচ্ছে।