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

C++ में दिए गए लिंक्ड लिस्ट को कैसे सेग्रिगेट करें

लिंक्ड लिस्ट एक रैखिक डेटा संरचना है जिसमें प्रत्येक नोड के दो ब्लॉक होते हैं जैसे कि एक ब्लॉक में नोड का मान या डेटा होता है और दूसरा ब्लॉक अगले फील्ड का पता रखता है।

मान लीजिए हमारे पास एक लिंक्ड लिस्ट है जैसे कि प्रत्येक नोड में डेटा और एक पॉइंटर होता है जो लिंक्ड लिस्ट के अगले नोड की ओर इंगित करता है। कार्य दिए गए लिंक्ड लिस्ट को सेग्रिगेट करना है। लिंक्ड लिस्ट को सेग्रिगेट करने का अर्थ है हमें लिस्ट में विषम इंडेक्स वाले नोड्स और सम इंडेक्स वाले नोड्स को अलग करना है।

इस समस्या को हल करने का दृष्टिकोण

दिए गए लिंक्ड लिस्ट को सेग्रिगेट करने के लिए, हम विषम इंडेक्स, सम इंडेक्स, और सम इंडेक्स पर मान के लिए तीन पॉइंटर्स पेश करेंगे। उसके बाद, हम पूरे लिंक्ड लिस्ट पर पुनरावृति करेंगे और पॉइंटर को कुछ मान से इनिशियलाइज़ करेंगे।

लिंक्ड लिस्ट में, इंडेक्सिंग '1' से शुरू होती है, इस प्रकार किसी विशेष स्ट्रिंग के लिए, लिस्ट का पहला नोड हमेशा विषम इंडेक्स वाले नोड के रूप में माना जाएगा। हालांकि, अगला नोड सम इंडेक्स वाले नोड के रूप में माना जाता है।

  • डेटा और अगले नोड के पॉइंटर के साथ एक लिंक्ड लिस्ट लें।
  • एक फ़ंक्शन segregateList(listnode *head) हेड नोड के पॉइंटर को लेता है और आउटपुट के रूप में सेग्रिगेटेड लिंक्ड लिस्ट लौटाता है।
  • तीन पॉइंटर्स oddIndex, evenIndex और evenHead इनिशियलाइज़ करें जो वर्तमान में लिस्ट के हेड की ओर इंगित कर रहे हैं।
  • पूरे लिंक्ड लिस्ट पर पुनरावृति करें और oddIndex के नेक्स्ट पॉइंटर को evenIndex के नेक्स्ट पॉइंटर से इनिशियलाइज़ करें।
  • अब पूरी लिस्ट पर पुनरावृति करें और evenIndex के नेक्स्ट पॉइंटर को oddIndex के नेक्स्ट पॉइंटर से इनिशियलाइज़ करें।
  • हेड पॉइंटर लौटाएं।

उदाहरण

#include <iostream>
using namespace std;
class node {
    public:
        int data;
        node * next;
        node(int d) {
            data = d;
            next = NULL;
        }
};
node * segregateList(node * head) {
    if (head == NULL) {
        return NULL;
    }
    node * oddIndex = head;
    node * evenIndex = head -> next;
    node * evenHead = evenIndex;
    while (evenIndex != NULL and evenIndex -> next != NULL) {
        oddIndex -> next = evenIndex -> next;
        oddIndex = oddIndex -> next;
        evenIndex -> next = oddIndex -> next;
        evenIndex = evenIndex -> next;
    }
    oddIndex -> next = evenHead;
    return head;
}
void insertAtNode(node * & head, int data) {
    node * n = new node(data);
    n -> next = head;
    head = n;
}
void print(node * head) {
    while (head != NULL) {
        cout << head -> data << "->";
        head = head -> next;
    }
}
int main() {
    node * head = NULL;
    // It could be possible that the head node contains NULL Value.
    insertAtNode(head, 5);
    insertAtNode(head, 8);
    insertAtNode(head, 3);
    insertAtNode(head, 1);
    insertAtNode(head, 2);
    print(head);
    cout << endl;
    segregateList(head);
    print(head);
}

उपरोक्त कोड चलाने से आउटपुट इस प्रकार उत्पन्न होगा,

आउटपुट

2->3->5->1->8->

दिया गया लिंक्ड लिस्ट है, 2->1->3->8->5->. लिंक्ड लिस्ट को सेग्रिगेट करने के बाद, यह आउटपुट के रूप में 2->3->5->1->8-> उत्पन्न करेगा।

  1. - C++ में लिंक्ड लिस्ट में पहला गैर-दोहराव वाला तत्व खोजना

    समस्या विवरण इस समस्या में, हमें आकार N की एक लिंक्ड लिस्ट LL दी गई है। हमारा कार्य लिंक्ड लिस्ट में गैर-दोहराव वाला तत्व खोजने के लिए एक प्रोग्राम बनाना है। लिंक्ड लिस्ट डेटा संरचनाओं का एक क्रम है, जो लिंक के माध्यम से एक साथ जुड़े होते हैं। उदाहरण इनपुट: LL = 4 → 6 → 2 → 4 → 1 → 2 → 6 → 5 आउटप

  1. - C++ में क्रमबद्ध लिंक्ड लिस्ट में मेडियन खोजना

    समस्या विवरण इस समस्या में, हमें N तत्वों वाली एक क्रमबद्ध लिंक्ड लिस्ट दी गई है। हमारा कार्य क्रमबद्ध लिंक्ड लिस्ट में मेडियन खोजना है। क्रमबद्ध लिंक्ड लिस्ट एक साधारण लिंक्ड लिस्ट है जिसमें सभी तत्व एक विशिष्ट क्रम में क्रमबद्ध होते हैं। उदाहरण: 4 → 6 → 7 → 9 → NULL मेडियन लिंक्ड लिस्ट का मध्य त

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

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