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

सी ++ में लिंक्ड सूची के मध्य हटाएं?

आइए पहले अपनी लिंक की गई सूची को परिभाषित करें जिसमें डेटा और अगले नोड के लिए पॉइंटर शामिल है।

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

इसके बाद हम अपना createNode(int data) फंक्शन बनाते हैं जो int डेटा को पैरामीटर के रूप में लेता है और पैरामीटर मान निर्दिष्ट करने के बाद नए बनाए गए नोड को लौटाता है। नोड का अगला पॉइंटर शून्य होगा।

Node* createNode(int data){
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->next = NULL;
   return newNode;
}

अब हमारे पास हमारा डिलीट मिडल (स्ट्रक्चर नोड * हेड) फंक्शन है जो रूट नोड लेता है। यदि रूट नोड शून्य नहीं है, तो यह केवल नोड के अगले मान को मध्य मान के बगल में नोड को निर्दिष्ट करता है और टेम्पहेड लौटाता है जो कि संशोधित हेड है।

struct Node* deleteMiddle(struct Node* head){
   if (head == NULL)
      return NULL;
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   Node* temphead = head;
   int count = nodeCount(head);
   int mid = count / 2;
   while (mid-- > 1) {
      head = head->next;
   }
   head->next = head->next->next;
   return temphead;
}

अंत में हमारे पास हमारी प्रिंटलिस्ट (नोड * पीटीआर) फ़ंक्शन है जो सूची का शीर्ष लेता है और सूची को प्रिंट करता है।

void printList(Node * ptr){
   while (ptr!= NULL) {
      cout << ptr->data << "->";
      ptr = ptr->next;
   }
   cout << "NULL"<<endl;
}

उदाहरण

आइए हम एक सिंगल लिंक्ड लिस्ट के बीच में डिलीट करने के निम्नलिखित कार्यान्वयन को देखें।

#include <iostream>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
Node* createNode(int data){
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->next = NULL;
   return newNode;
}
int nodeCount(struct Node* head){
   int count = 0;
   while (head != NULL) {
      head = head->next;
      count++;
   }
   return count;
}
struct Node* deleteMiddle(struct Node* head){
   if (head == NULL)
      return NULL;
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   Node* temphead = head;
   int count = nodeCount(head);
   int mid = count / 2;
   while (mid-- > 1) {
      head = head->next;
   }
   head->next = head->next->next;
   return temphead;
}
void printList(Node * ptr){
   while (ptr!= NULL) {
      cout << ptr->data << "->";
      ptr = ptr->next;
   }
   cout << "NULL"<<endl;
}
int main(){
   struct Node* head = createNode(2);
   head->next = createNode(4);
   head->next->next = createNode(6);
   head->next->next->next = createNode(8);
   head->next->next->next->next = createNode(10);
   cout << "Original linked list"<<endl;
   printList(head);
   head = deleteMiddle(head);
   cout<<endl;
   cout << "After deleting the middle of the linked list"<<endl;
   printList(head);
   return 0;
}

आउटपुट

उपरोक्त कोड निम्न आउटपुट उत्पन्न करेगा -

Original linked list
2->4->6->8->10->NULL

After deleting the middle of the linked list
2->4->8->10->NULL

  1. सी ++ में एक लिंक्ड सूची को समतल करना

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

  1. सी++ में लिंक्ड सूची की वैकल्पिक छँटाई

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

  1. सी ++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना।

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