কম্পিউটার

C++ প্রোগ্রামে লিঙ্ক করা তালিকার মাঝখানে মুছুন


এই টিউটোরিয়ালে, আমরা শিখব কিভাবে একটি লিঙ্ক করা তালিকার মধ্যবর্তী নোড মুছে ফেলতে হয়।

সমস্যার সমাধান সোজা। আমাদের কাছে দুটি পয়েন্টার থাকবে একটি এক সময়ে একটি নোড সরায় এবং অন্যটি একটি সময়ে দুটি নোড সরায়। দ্বিতীয় পয়েন্টারটি চূড়ান্ত নোডে পৌঁছানোর সময়, প্রথমটি লিঙ্ক করা তালিকার মাঝখানে থাকবে৷

আসুন সমস্যা সমাধানের পদক্ষেপগুলি দেখি৷

  • লিঙ্ক করা তালিকা নোডের জন্য একটি স্ট্রাকট নোড লিখুন।

  • ডামি ডেটা দিয়ে লিঙ্ক করা তালিকা শুরু করুন।

  • লিঙ্ক করা তালিকা মুছে ফেলার জন্য একটি ফাংশন লিখুন।

    • লিংকড লিস্ট হেড পয়েন্টার সহ দুই-পয়েন্টার (ধীর ও দ্রুত) শুরু করুন।

    • দ্রুত পয়েন্টার শেষ না হওয়া পর্যন্ত লিঙ্ক করা তালিকার উপর পুনরাবৃত্তি করুন।

    • ধীরগতির পয়েন্টারটিকে পরবর্তী একটি নোডে নিয়ে যান৷

    • দ্রুত পয়েন্টারটিকে পরবর্তী নোডের পরবর্তী নোডে নিয়ে যান।

    • হেড পয়েন্টার ফেরত দিন

  • লিঙ্ক করা তালিকা প্রিন্ট করুন।

উদাহরণ

আসুন কোডটি দেখি।

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
struct Node* deleteMiddleNode(struct Node* head) {
   if (head == NULL) {
      return NULL;
   }
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   struct Node* slow_ptr = head;
   struct Node* fast_ptr = head;
   struct Node* prev;
   while (fast_ptr != NULL && fast_ptr->next != NULL) {
      fast_ptr = fast_ptr->next->next;
      prev = slow_ptr;
      slow_ptr = slow_ptr->next;
   }
   prev->next = slow_ptr->next;
   delete slow_ptr;
   return head;
}
void printLinkedList(struct Node* node) {
   while (node != NULL) {
      cout << node->data << " -> ";
      node = node->next;
   }
   cout << "Null" << endl;
}
Node* newNode(int data) {
   struct Node* temp = new Node;
   temp->data = data;
   temp->next = NULL;
   return temp;
}
int main() {
   struct Node* head = newNode(1);
   head->next = newNode(2);
   head->next->next = newNode(3);
   head->next->next->next = newNode(4);
   head->next->next->next->next = newNode(5);
   head->next->next->next->next->next = newNode(6);
   cout << "Linked list before deleting middle node: ";
   printLinkedList(head);
   head = deleteMiddleNode(head);
   cout << "Linked List after deleting middle node: ";
   printLinkedList(head);
   return 0;
}

আউটপুট

আপনি যদি উপরের প্রোগ্রামটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।

মধ্যবর্তী নোড মুছে ফেলার আগে
Linked list before deleting middle node: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> Null
Linked List after deleting middle node: 1 -> 2 -> 3 -> 5 -> 6 -> Null

উপসংহার

টিউটোরিয়ালে আপনার কোন প্রশ্ন থাকলে মন্তব্য বিভাগে উল্লেখ করুন।


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

  2. এককভাবে লিঙ্কযুক্ত তালিকা বাস্তবায়নের জন্য সি++ প্রোগ্রাম

  3. সার্কুলার লিঙ্কড তালিকার মাঝখানে থেকে একটি নোড মুছে ফেলার জন্য পাইথন প্রোগ্রাম

  4. পাইথনে লিঙ্কযুক্ত তালিকায় নোড মুছুন