परिचय
इस ट्यूटोरियल में हम सीखेंगे कि C++ में सिंगल लिंक्ड लिस्ट से सभी अभाज्य (prime) मान वाले नोड्स को कैसे हटाया जाता है। सिंगल लिंक्ड लिस्ट में प्रत्येक नोड केवल अगले नोड का पॉइंटर रखता है।
समस्या समाधान के चरण
- डेटा और next पॉइंटर के साथ एक स्ट्रक्चर परिभाषित करें।
- सिंगल लिंक्ड लिस्ट में नोड डालने का फंक्शन लिखें।
- डमी डेटा के साथ लिस्ट को इनिशियलाइज़ करें।
- लिस्ट पर पुनरावृत्ति करें और जांचें कि वर्तमान नोड का डेटा अभाज्य है या नहीं।
- यदि डेटा अभाज्य है, तो उस नोड को डिलीट करें।
- नोड डिलीट करने का फंक्शन लिखते समय तीन स्थितियों पर विचार करें:
- यदि नोड हेड नोड है, तो हेड को अगले नोड पर ले जाएं।
- यदि नोड मध्य में है, तो अगले नोड को पिछले नोड से लिंक करें।
- यदि नोड अंतिम है, तो पिछले नोड का लिंक हटा दें।
उदाहरण कोड
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node *next;
};
void insertNode(Node** head_ref, int new_data) {
Node* new_node = (Node*)malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->next = (*head_ref);
(*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) {
struct Node* temp = *head_ref;
if (*head_ref == NULL || del == NULL) return;
if (*head_ref == del) {
*head_ref = del->next;
}
while (temp->next != del) {
temp = temp->next;
}
temp->next = del->next;
free(del);
}
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);
return 0;
}
आउटपुट
Linked List before deletion: 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> Linked List after deletion: 6 -> 4 -> 1 ->
निष्कर्ष
इस प्रोग्राम में हमने सिंगल लिंक्ड लिस्ट से सभी अभाज्य मान वाले नोड्स को सफलतापूर्वक हटा दिया। isPrime() फंक्शन अभाज्य संख्या की जांच के लिए अनुकूलित एल्गोरिदम का उपयोग करता है। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।