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

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


परिचय

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

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

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

उदाहरण कोड

#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;
}

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);
}

void deleteEvenNodes(Node** head_ref) {
    Node* temp = *head_ref;
    Node* next;
    while (temp != NULL) {
        next = temp->next;
        if (temp->data % 2 == 0) {
            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);
    deleteEvenNodes(&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 -> 1 ->

निष्कर्ष

इस प्रोग्राम में हमने डबल लिंक्ड लिस्ट से सभी सम मान वाले नोड्स को सफलतापूर्वक हटा दिया। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।


  1. C++ में सर्कुलर लिंक्ड सूची के नोड्स का योग C++ में सर्कुलर लिंक्ड सूची के नोड्स का योग

    इस समस्या में, हमें एक सर्कुलर लिंक्ड सूची दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो सर्कुलर लिंक्ड सूची के नोड्स का योग ढूंढे। हमें बस लिंक्ड सूची के सभी नोड मानों को जोड़ना है। कुछ महत्वपूर्ण परिभाषाएं लिंक्ड सूची डेटा संरचनाओं का एक क्रम है, जो लिंक्स के माध्यम से एक साथ जुड़े हुए हैं।

  1. - पायथन प्रोग्राम: डबल लिंक्ड लिस्ट के अंत से नया नोड हटाएं

    जब डबल लिंक्ड लिस्ट के अंत से एक नोड हटाने की आवश्यकता होती है, तो एक Node क्लास बनाने की आवश्यकता होती है। इस क्लास में तीन एट्रिब्यूट्स होते हैं, नोड में मौजूद डेटा, लिंक्ड लिस्ट के अगले नोड तक पहुंच, और लिंक्ड लिस्ट के पिछले नोड तक पहुंच।उदाहरणclass Node: def __init__(self, my_data):

  1. - पायथन प्रोग्राम: डबल लिंक्ड लिस्ट की शुरुआत से नया नोड हटाएं

    जब डबल लिंक्ड लिस्ट की शुरुआत से एक नोड हटाने की आवश्यकता होती है, तो एक Node क्लास बनाने की आवश्यकता होती है। इस क्लास में तीन एट्रिब्यूट्स होते हैं, नोड में मौजूद डेटा, लिंक्ड लिस्ट के अगले नोड तक पहुंच, और लिंक्ड लिस्ट के पिछले नोड तक पहुंच।उदाहरणclass Node: def __init__(self, my_data):