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

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++ में सर्कुलर लिंक्ड सूची के नोड्स का योग C++ में सर्कुलर लिंक्ड सूची के नोड्स का योग

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

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

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

  1. - C++ में लिंक्ड लिस्ट का भाग उलटना (Reverse Linked List II)

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