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

सी++ में सभी शून्यों को लिंक की गई सूची के सामने ले जाएं

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

इनपुट

3 -> 0 -> 1-> 0 -> 0 -> 1 -> 0 -> 0 -> 3 -> NULL

आउटपुट

0->0->0->0->0->3->1->1->3->NULL

एल्गोरिदम

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

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

कार्यान्वयन

C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *next;
};
void addNewNode(struct Node **head, int data) {
   struct Node *newNode = new Node;
   newNode->data = data;
   newNode->next = *head;
   *head = newNode;
}
void moveZeroes(struct Node **head) {
   if (*head == NULL) {
      return;
   }
   struct Node *temp = (*head)->next, *prev = *head;
   while (temp != NULL) {
      if (temp->data == 0) {
         Node *current = temp;
         temp = temp->next;
         prev->next = temp;
         current->next = *head;
         *head = current;
      }else {
         prev = temp;
         temp = temp->next;
      }
   }
}
void printLinkedList(struct Node *head) {
   while (head != NULL) {
      cout << head->data << "->";
      head = head->next;
   }
   cout << "NULL" << endl;
}
int main() {
   struct Node *head = NULL;
   addNewNode(&head, 3);
   addNewNode(&head, 0);
   addNewNode(&head, 1);
   addNewNode(&head, 0);
   addNewNode(&head, 0);
   addNewNode(&head, 1);
   addNewNode(&head, 0);
   addNewNode(&head, 0);
   addNewNode(&head, 3);
   moveZeroes(&head);
   printLinkedList(head);
   return 0;
}

आउटपुट

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

0->0->0->0->0->3->1->1->3->NULL

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

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

  1. सी++ में लिंक्ड सूची के वैकल्पिक नोड्स का योग

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

  1. C++ में रिवर्स लिंक्ड लिस्ट II

    मान लीजिए हमारे पास एक लिंक्ड सूची है। हमें नोड्स को स्थिति m से n तक उलटना होगा। हमें इसे एक पास में करना होगा। इसलिए यदि सूची [1,2,3,4,5] और m =2 और n =4 है, तो परिणाम [1,4,,3,2,5] होगा। आइए चरणों को देखें - दो तरीके होंगे, रिवर्सएन () और रिवर्सबीच ()। रिवर्सबीच () मुख्य विधि के रूप में काम करेग