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

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

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

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

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

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

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

  • नोड को मिटाने के लिए पोजीशन को इनिशियलाइज़ करें।

  • लिंक की गई सूची पर पुनरावृति करें और नोड को हटाने के लिए दी गई स्थिति के साथ नोड खोजें।

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

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

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

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

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *prev, *next;
};
void deleteNode(struct Node** head_ref, struct Node* del) {
   if (*head_ref == NULL || del == NULL) {
      return;
   }
   // head node
   if (*head_ref == del) {
      *head_ref = del->next;
   }
   // middle node
   if (del->next != NULL) {
      del->next->prev = del->prev;
   }
   // end node
   if (del->prev != NULL) {
      del->prev->next = del->next;
   }
   free(del);
}
void deleteNodeAtGivenPosition(struct Node** head_ref, int n) {
   if (*head_ref == NULL || n <= 0) {
      return;
   }
   struct Node* current = *head_ref;
   int i;
   for (int i = 1; current != NULL && i < n; i++) {
      current = current->next;
   }
   if (current == NULL) {
      return;
   }
   deleteNode(head_ref, current);
}
void insertNode(struct Node** head_ref, int new_data) {
   struct Node* new_node = (struct 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 printLinkedList(struct Node* head) {
   while (head != NULL) {
      cout << head->data << "->";
      head = head->next;
   }
}
int main() {
   struct Node* head = NULL;
   insertNode(&head, 5);
   insertNode(&head, 2);
   insertNode(&head, 4);
   insertNode(&head, 8);
   insertNode(&head, 10);
   cout << "Doubly linked list before deletion" << endl;
   printLinkedList(head);
   int n = 2;
   deleteNodeAtGivenPosition(&head, n);
   cout << "\nDoubly linked list after deletion" << endl;
   printLinkedList(head);
   return 0;
}

आउटपुट

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

Doubly linked list before deletion
10->8->4->2->5->
Doubly linked list after deletion
10->4->2->5->

निष्कर्ष

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


  1. C++ में एक बहुस्तरीय लिंक्ड सूची को समतल करें

    इस समस्या में, हमें एक बहुस्तरीय लिंक्ड सूची दी गई है। हमारा काम एक बहुस्तरीय लिंक्ड सूची को समतल करने के लिए एक प्रोग्राम बनाना है। फ़्लैटनिंग ऑपरेशन इस तरह से किया जाता है कि पहले स्तर के नोड्स पहले लिंक की गई सूची में होंगे और फिर दूसरे स्तर के नोड होंगे। बहुस्तरीय लिंक की गई सूची एक बहु-आयामी

  1. सी ++ प्रोग्राम क्रमबद्ध रूप से डबल लिंक्ड लिस्ट को लागू करने के लिए

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

  1. सर्कुलर डबल लिंक्ड लिस्ट को लागू करने के लिए C++ प्रोग्राम

    डेटा संरचना में लिंक सूची डेटा तत्वों का एक रैखिक संग्रह है। सूची के प्रत्येक तत्व या नोड में दो आइटम होते हैं - डेटा और अगले नोड का संदर्भ। अंतिम नोड में शून्य का संदर्भ है। एक लिंक्ड सूची में प्रवेश बिंदु को सूची का प्रमुख कहा जाता है। सर्कुलर डबल लिंक्ड लिस्ट में दो लगातार तत्व पिछले और अगले पॉइ