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;
}
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 deleteSmallerNodes(Node** head_ref, int K) {
   Node* temp = *head_ref;
   Node* next;
   while (temp != NULL) {
      next = temp->next;
      if (temp->data < K) {
         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, 10);
   insertNode(&head, 11);
   insertNode(&head, 12);
   int K = 10;
   cout << "Linked List before deletion:" << endl;
   printLinkedList(head);
   deleteSmallerNodes(&head, K);
   cout << "\nLinked List after deletion:" << endl;
   printLinkedList(head);
}

आउटपुट

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

Linked List before deletion:
12 -> 11 -> 10 -> 4 -> 3 -> 2 -> 1 ->
Linked List after deletion:
12 -> 11 -> 10 ->

निष्कर्ष

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


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

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

  1. C++ में लीफ नोड से k दूरी पर मौजूद सभी नोड्स को प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री और एक नंबर K दिया जाता है। हमें ट्री के सभी नोड्स को प्रिंट करना होता है जो लीफ नोड से k दूरी पर होते हैं। बाइनरी ट्री एक विशेष पेड़ है जिसके प्रत्येक नोड में अधिकतम दो नोड (एक/दो/कोई नहीं) होते हैं। लीफ नोड बाइनरी ट्री का नोड ट्री के अंत में होता है। इस समस्या

  1. यह जाँचने के लिए प्रोग्राम कि क्या किसी सूची के सभी मान जो Python में दिए गए मान से अधिक हैं

    इस ट्यूटोरियल में, हम जाँचेंगे कि सूची के सभी तत्व एक संख्या से बड़े हैं या नहीं। उदाहरण के लिए, हमारे पास एक सूची है [1, 2, 3, 4, 5] और एक संख्या 0. यदि सूची में प्रत्येक मान दिए गए मान से अधिक है, तो हम सत्य लौटाते हैं और झूठा । यह एक साधारण कार्यक्रम है। हम इसे 3 मिनट से भी कम समय में लिखते है