Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में एक डबल लिंक्ड लिस्ट से सभी प्राइम नोड्स को डिलीट करें

इस ट्यूटोरियल में, हम सीखेंगे कि डबल लिंक्ड लिस्ट से सभी प्राइम नोड्स को कैसे डिलीट किया जाए।

आइए समस्या को हल करने के लिए चरणों को देखें।

  • डेटा, पिछले और अगले पॉइंटर्स के साथ स्ट्रक्चर लिखें।

  • डबल लिंक की गई सूची में नोड डालने के लिए एक फ़ंक्शन लिखें।

  • डमी डेटा के साथ डबल लिंक्ड लिस्ट को इनिशियलाइज़ करें।

  • दोहरी लिंक की गई सूची पर पुनरावृति करें। पता करें कि वर्तमान नोड डेटा प्राइम है या नहीं।

  • यदि वर्तमान डेटा प्राइम है, तो नोड को हटा दें।

  • नोड को हटाने के लिए एक फ़ंक्शन लिखें। नोड को हटाते समय निम्नलिखित तीन मामलों पर विचार करें।

    • अगर नोड हेड नोड है, तो हेड को अगले नोड पर ले जाएं।

    • यदि नोड मध्य नोड है, तो अगले नोड को पिछले नोड से लिंक करें

    • यदि नोड अंतिम नोड है, तो पिछले नोड लिंक को हटा दें।

उदाहरण

आइए कोड देखें।

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *prev, *next;
};
void insertNode(Node** head_ref, int new_data) {
   Node* new_node = (Node*)malloc(sizeof(struct Node));
   new_node->data = new_data;
   new_node->prev = NULL;
   new_node->next = (*head_ref);
   if ((*head_ref) != NULL) {
      (*head_ref)->prev = new_node;
   }
   (*head_ref) = new_node;
}
bool isPrime(int n) {
   if (n <= 1) {
      return false;
   }
   if (n <= 3) {
      return true;
   }
   if (n % 2 == 0 || n % 3 == 0) {
      return false;
   }
   for (int i = 5; i * i <= n; i = i + 6) {
      if (n % i == 0 || n % (i + 2) == 0) {
         return false;
      }
   }
   return true;
}
void deleteNode(Node** head_ref, Node* del) {
   if (*head_ref == NULL || del == NULL) {
      return;
   }
   if (*head_ref == del) {
      *head_ref = del->next;
   }
   if (del->next != NULL) {
      del->next->prev = del->prev;
   }  
   if (del->prev != NULL) {
      del->prev->next = del->next;
   }
   free(del);
   return;
}
void deletePrimeNodes(Node** head_ref) {
   Node* temp = *head_ref;
   Node* next;
   while (temp != NULL) {
      next = temp->next;
      if (isPrime(temp->data)) {
         deleteNode(head_ref, temp);
      }
      temp = next;
   }
}
void printLinkedList(Node* head) {
   while (head != NULL) {
      cout << head->data << " -> ";
      head = head->next;
   }
}
int main() {
   Node* head = NULL;
   insertNode(&head, 1);
   insertNode(&head, 2);
   insertNode(&head, 3);
   insertNode(&head, 4);
   insertNode(&head, 5);
   insertNode(&head, 6);
   cout << "Linked List before deletion:" << endl;
   printLinkedList(head);
   deletePrimeNodes(&head);
   cout << "\nLinked List after deletion:" << endl;
   printLinkedList(head);
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

Linked List before deletion:
6 -> 5 -> 4 -> 3 -> 2 -> 1 ->
Linked List after deletion:
6 -> 4 -> 1 ->

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. C++ में 2D मैट्रिक्स से एक लिंक्ड सूची का निर्माण करें

    मान लीजिए कि हमारे पास एक मैट्रिक्स है, हमें इसे पुनरावर्ती दृष्टिकोण का उपयोग करके 2d लिंक्ड सूची में बदलना होगा। सूची में दाएँ और नीचे सूचक होंगे। तो, अगर इनपुट पसंद है 10 20 30 40 50 60 70 80 90 तब आउटपुट होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - फ़ंक्शन को परिभाषित करें

  1. C++ में सिंगल लिंक्ड लिस्ट में सभी प्राइम नोड्स का उत्पाद

    एन नोड्स के साथ दिया गया और कार्य एक लिंक्ड सूची में सभी प्राइम नोड्स के उत्पाद को प्रिंट करना है। प्राइम नोड्स वे हैं जिनके पास उनके गिनती स्थानों के रूप में प्रमुख मान होंगे। इनपुट 10 20 30 40 50 आउटपुट 4,00,000 स्पष्टीकरण -10 इंडेक्स वैल्यू 1 पर है जो नॉन-प्राइम है इसलिए इसे छोड़ दिया जाएगा।

  1. C++ में सर्कुलर लिंक्ड लिस्ट में नोड्स गिनें

    हमें नोड्स के साथ एक सर्कुलर लिंक्ड लिस्ट दी गई है और कार्य एक सर्कुलर लिंक्ड लिस्ट में मौजूद नोड्स की गिनती की गणना करना है। सर्कुलर लिंक्ड लिस्ट लिंक्ड लिस्ट का एक रूपांतर है जिसमें पहला तत्व अंतिम तत्व को इंगित करता है और अंतिम तत्व पहले तत्व को इंगित करता है। सिंगल लिंक्ड लिस्ट और डबल लिंक्ड लि