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

C++ प्रोग्राम में लिंक्ड लिस्ट के बीच में डिलीट करें

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

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

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

  • लिंक की गई सूची नोड के लिए एक स्ट्रक्चर नोड लिखें।

  • डमी डेटा के साथ लिंक की गई सूची को प्रारंभ करें।

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

    • लिंक्ड लिस्ट हेड पॉइंटर के साथ टू-पॉइंटर्स (धीमे और तेज़) को इनिशियलाइज़ करें।

    • लिंक की गई सूची पर तब तक पुनरावृति करें जब तक कि तेज़ सूचक अंत तक न पहुँच जाए।

    • धीमे पॉइंटर को अगले एक नोड पर ले जाएँ।

    • फ़ास्ट पॉइंटर को अगले नोड के अगले नोड पर ले जाएँ।

    • हेड पॉइंटर लौटाएं

  • लिंक की गई सूची प्रिंट करें।

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
struct Node* deleteMiddleNode(struct Node* head) {
   if (head == NULL) {
      return NULL;
   }
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   struct Node* slow_ptr = head;
   struct Node* fast_ptr = head;
   struct Node* prev;
   while (fast_ptr != NULL && fast_ptr->next != NULL) {
      fast_ptr = fast_ptr->next->next;
      prev = slow_ptr;
      slow_ptr = slow_ptr->next;
   }
   prev->next = slow_ptr->next;
   delete slow_ptr;
   return head;
}
void printLinkedList(struct Node* node) {
   while (node != NULL) {
      cout << node->data << " -> ";
      node = node->next;
   }
   cout << "Null" << endl;
}
Node* newNode(int data) {
   struct Node* temp = new Node;
   temp->data = data;
   temp->next = NULL;
   return temp;
}
int main() {
   struct Node* head = newNode(1);
   head->next = newNode(2);
   head->next->next = newNode(3);
   head->next->next->next = newNode(4);
   head->next->next->next->next = newNode(5);
   head->next->next->next->next->next = newNode(6);
   cout << "Linked list before deleting middle node: ";
   printLinkedList(head);
   head = deleteMiddleNode(head);
   cout << "Linked List after deleting middle node: ";
   printLinkedList(head);
   return 0;
}

आउटपुट

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

Linked list before deleting middle node: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> Null
Linked List after deleting middle node: 1 -> 2 -> 3 -> 5 -> 6 -> Null

निष्कर्ष

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


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

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

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

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

  1. पायथन में एक लिंक्ड सूची में नोड हटाएं

    मान लीजिए कि हमारे पास कुछ तत्वों के साथ एक लिंक्ड सूची है। हमारा काम एक फ़ंक्शन लिखना है जो दिए गए नोड को सूची से हटा देगा। तो अगर सूची 1 → 3 → 5 → 7 → 9 की तरह है, और 3 को हटाने के बाद, यह 1 → 5 → 7 → 9 होगा। मान लें कि हमारे पास पॉइंटर नोड है जो इंगित करता है कि नोड को हटाया जाना है, हमें नोड को