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

C++ में सिंगल लिंक्ड लिस्ट से सभी गैर-अभाज्य नोड्स को डिलीट करना


परिचय

इस ट्यूटोरियल में हम सीखेंगे कि C++ में सिंगल लिंक्ड लिस्ट से सभी गैर-अभाज्य (non-prime) मान वाले नोड्स को कैसे हटाया जाता है। यह पिछले ट्यूटोरियल के विपरीत है जहां हम अभाज्य नोड्स हटा रहे थे।

समस्या समाधान के चरण

  1. डेटा और next पॉइंटर के साथ एक स्ट्रक्चर परिभाषित करें।
  2. सिंगल लिंक्ड लिस्ट में नोड डालने का फंक्शन लिखें।
  3. डमी डेटा के साथ लिस्ट को इनिशियलाइज़ करें।
  4. लिस्ट पर पुनरावृत्ति करें और जांचें कि वर्तमान नोड का डेटा गैर-अभाज्य है या नहीं।
  5. यदि डेटा गैर-अभाज्य है, तो उस नोड को डिलीट करें।
  6. नोड डिलीट करने का फंक्शन लिखते समय तीन स्थितियों पर विचार करें।

उदाहरण कोड

#include <bits/stdc++.h>
using namespace std;

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

void insertNode(Node** head_ref, int new_data) {
    Node* new_node = new 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 deleteNonPrimeNodes(Node** head_ref) {
    Node* ptr = *head_ref;
    // शुरुआत से गैर-अभाज्य नोड्स हटाएं
    while (ptr != NULL && !isPrime(ptr->data)) {
        Node *temp = ptr;
        ptr = ptr->next;
        delete(temp);
    }
    *head_ref = ptr;
    if (ptr == NULL) return;
    
    Node *curr = ptr->next;
    while (curr != NULL) {
        if (!isPrime(curr->data)) {
            ptr->next = curr->next;
            delete(curr);
            curr = ptr->next;
        } else {
            ptr = curr;
            curr = curr->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);
    deleteNonPrimeNodes(&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: 5 -> 3 -> 2 ->

निष्कर्ष

इस प्रोग्राम में हमने सिंगल लिंक्ड लिस्ट से सभी गैर-अभाज्य मान वाले नोड्स को सफलतापूर्वक हटा दिया। ध्यान दें कि 1 न तो अभाज्य है और न ही गैर-अभाज्य (यह एक यूनिट है), इसलिए इसे भी हटा दिया गया। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।


  1. C++ में एकल लिंक्ड सूची में सभी अभाज्य नोड्स का गुणनफल C++ में एकल लिंक्ड सूची में सभी अभाज्य नोड्स का गुणनफल

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

  1. C++ में दिए गए नोड से दूरी K पर सभी नोड्स प्रिंट करना C++ में दिए गए नोड से दूरी K पर सभी नोड्स प्रिंट करना

    इस समस्या में, हमें एक बाइनरी ट्री, एक टारगेट नोड और एक पूर्णांक K दिया गया है। हमें ट्री के उन सभी नोड्स को प्रिंट करना है जो टारगेट नोड से दूरी K पर हैं। बाइनरी ट्री बाइनरी ट्री एक विशेष ट्री है जिसके प्रत्येक नोड में अधिकतम दो नोड्स होते हैं (एक/दो/कोई नहीं)। उदाहरण K = 2 टारगेट नोड: 9 आउटपुट

  1. - C++ प्रोग्राम: सर्कुलर सिंगली लिंक्ड लिस्ट कार्यान्वयन

    सर्कुलर सिंगली लिंक्ड लिस्ट अंतिम नोड पहले नोड (head) को इंगित करता है, जिससे एक वृत्त बनता है। केवल head संदर्भ से पूरी सूची एक्सेस की जा सकती है। C++ प्रोग्राम उदाहरण next; } while (ptr != head); } int main() { insert(3); insert(1); insert(7); insert(2); insert(9); c