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

C++ में दी गई पोजीशन पर लिंक्ड लिस्ट नोड डिलीट करना


परिचय

इस ट्यूटोरियल में हम सीखेंगे कि C++ में सिंगल लिंक्ड लिस्ट से दी गई पोजीशन (position) पर स्थित नोड को कैसे डिलीट किया जाता है। यह एक सामान्य ऑपरेशन है जो इंडेक्स-आधारित एक्सेस की आवश्यकता होने पर उपयोगी होता है।

समस्या समाधान के चरण

  1. डेटा और next पॉइंटर के साथ एक स्ट्रक्चर परिभाषित करें।
  2. सिंगल लिंक्ड लिस्ट में नोड डालने का फंक्शन लिखें।
  3. डमी डेटा के साथ लिस्ट को इनिशियलाइज़ करें।
  4. डिलीट करने के लिए पोजीशन इनिशियलाइज़ करें।
  5. लिंक्ड लिस्ट पर पुनरावृत्ति करें और दी गई पोजीशन वाले नोड को ढूंढें।
  6. नोड डिलीट करने का फंक्शन लिखते समय तीन स्थितियों पर विचार करें:
    • यदि नोड हेड नोड है (पोजीशन 1), तो हेड को अगले नोड पर ले जाएं।
    • यदि नोड मध्य में है, तो अगले नोड को पिछले नोड से लिंक करें।
    • यदि नोड अंतिम है, तो पिछले नोड का लिंक हटा दें।

उदाहरण कोड

#include <bits/stdc++.h>
using namespace std;

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

void insertNode(struct Node** head_ref, int new_data) {
    struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}

void deleteNode(struct Node **head_ref, int position) {
    if (*head_ref == NULL) return;
    struct Node* temp = *head_ref;
    if (position == 1) {
        *head_ref = temp->next;
        free(temp);
        return;
    }
    for (int i = 2; temp != NULL && i < position - 1; i++) {
        temp = temp->next;
    }
    if (temp == NULL || temp->next == NULL) return;
    struct Node *next = temp->next->next;
    free(temp->next);
    temp->next = next;
}

void printLinkedList(struct Node *node) {
    while (node != NULL) {
        cout << node->data << "->";
        node = node->next;
    }
}

int main() {
    struct Node* head = NULL;
    insertNode(&head, 1);
    insertNode(&head, 2);
    insertNode(&head, 3);
    insertNode(&head, 4);
    insertNode(&head, 5);
    cout << "Linked list before deletion:" << endl;
    printLinkedList(head);
    deleteNode(&head, 1); // पहली पोजीशन डिलीट करें
    cout << "\nLinked list after deletion:" << endl;
    printLinkedList(head);
    return 0;
}

आउटपुट

Linked list before deletion: 5->4->3->2->1->
Linked list after deletion: 4->3->2->1->

निष्कर्ष

इस प्रोग्राम में हमने सिंगल लिंक्ड लिस्ट से दी गई पोजीशन (1) पर स्थित नोड को सफलतापूर्वक डिलीट किया। समय जटिलता O(n) है क्योंकि हमें पोजीशन तक पहुंचने के लिए ट्रैवर्स करना पड़ता है। यदि पोजीशन अमान्य है, तो फंक्शन कुछ नहीं करता। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।


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

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

  1. - C++ में लिंक्ड लिस्ट सर्कुलर है या नहीं जांचें

    समस्या विवरण जांचें कि दिया गया लिंक्ड लिस्ट सर्कुलर है या नहीं। एल्गोरिदम हेड नोड को स्टोर करें लिस्ट ट्रैवर्स करें यदि NULL मिले → सर्कुलर नहीं यदि हेड नोड पर वापस आ जाएं → सर्कुलर है उदाहरण कोड next = start; // सर्कुलर बनाएं if (isCircularList(start)) cout << The list

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

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