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

C++ का उपयोग करके दिए गए सिंगली लिंक्ड लिस्ट से टेल नोड हटाएं


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

हमारा कार्य यहां लिंक्ड लिस्ट के अंत से एक नोड को हटाना है। अंतिम नोड को टेल नोड के रूप में जाना जाता है। यदि लिंक्ड लिस्ट में कोई नोड नहीं है, तो NULL लौटाएं।

उदाहरण के लिए -

इनपुट 1 - 1 → 2 → 3 → 4 → 5

आउटपुट - 1 → 2 → 3 → 4 →

व्याख्या - दी गई सिंगली लिंक्ड लिस्ट में, अंत से नोड '5' है। अंतिम नोड को हटाने के बाद, आउटपुट होगा, 1 → 2 → 3 → 4 →।

इनपुट 2 - 5 → 8 → 3

आउटपुट - 5 → 8 →

व्याख्या - दी गई सिंगली लिंक्ड लिस्ट में, अंत से नोड '3' है। अंत से नोड को हटाने के बाद, आउटपुट होगा, 5 → 8 →।

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

इस विशेष प्रॉब्लम को हल करने का सरल दृष्टिकोण एक पिछला नोड बनाना है जो बाद में वर्तमान नोड का मान संग्रहीत करता है जब वर्तमान पॉइंटर लिंक्ड लिस्ट के अंतिम नोड की ओर इशारा करेगा।

लिंक्ड लिस्ट के सभी नोड्स पर पुनरावृति करें यदि वर्तमान नोड अंतिम नोड की ओर इशारा करता है। और अंत में, लिंक्ड लिस्ट से लौटें।

  • नोड्स डालकर लिंक्ड लिस्ट इनिशियलाइज़ करें।

  • फंक्शन insertAtFirst(node*& head, int data) लिंक्ड लिस्ट में सभी नोड्स डालेगा।

  • एक फंक्शन deleteAtTail(node* head) एक पॉइंटर लेता है जो वर्तमान में हेड की ओर इशारा कर रहा है।

  • एक पिछला नोड पॉइंटर बनाएं और इसे NULL के रूप में इनिशियलाइज़ करें।

  • एक अस्थायी नोड पॉइंटर बनाएं जो वर्तमान में पॉइंटर के हेड की ओर इशारा कर रहा है।

  • अस्थायी पॉइंटर को तब तक पार करें जब तक यह लिंक्ड लिस्ट के अंत तक नहीं पहुंच जाता।

  • अस्थायी पॉइंटर के मान को पिछले नोड पॉइंटर में संग्रहीत करें।

  • अस्थायी पॉइंटर को हटाएं।

  • लिंक्ड लिस्ट लौटाएं।

उदाहरण

#include <iostream>
using namespace std;

class node {
public:
    int data;
    node* next;
    node(int d) {
        data = d;
        next = NULL;
    }
};

void insertAtFirst(node*& head, int data) {
    node* n = new node(data);
    n->next = head;
    head = n;
}

void printNode(node* head) {
    while (head != NULL) {
        cout << head->data << "->";
        head = head->next;
    }
    cout << endl;
}

void deleteAtTail(node* head) {
    node* prev = NULL;
    node* temp = head;
    while (temp->next != NULL) {
        prev = temp;
        temp = temp->next;
    }
    delete temp;
    prev->next = NULL;
    return;
}

int main() {
    node* head = NULL;
    insertAtFirst(head, 5);
    insertAtFirst(head, 4);
    insertAtFirst(head, 3);
    insertAtFirst(head, 2);
    insertAtFirst(head, 1);
    deleteAtTail(head);
    printNode(head);
}

आउटपुट

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

1→2→3→4→

दिए गए इनपुट सिंगली लिंक्ड लिस्ट में, 1 → 2 → 3 → 4 → 5, लिंक्ड लिस्ट का अंतिम नोड '5' है। इसलिए, अंतिम नोड को हटाने के बाद, लिंक्ड लिस्ट 1 → 2 → 3 → 4 → बन जाएगी।


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

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

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

    परिचय इस ट्यूटोरियल में हम सीखेंगे कि C++ में डबल लिंक्ड लिस्ट से दी गई पोजीशन (position) पर स्थित नोड को कैसे डिलीट किया जाता है। डबल लिंक्ड लिस्ट में पिछले नोड का एक्सेस होने के कारण डिलीट ऑपरेशन अधिक सरल होता है। समस्या समाधान के चरण डेटा, prev और next पॉइंटर्स के साथ एक स्ट्रक्चर परिभाषित

  1. - C++ प्रोग्राम: सर्कुलर सिंगली लिंक्ड लिस्ट कार्यान्वयन

    सर्कुलर सिंगली लिंक्ड लिस्ट अंतिम नोड पहले नोड (head) को इंगित करता है, जिससे एक वृत्त बनता है। केवल head संदर्भ से पूरी सूची एक्सेस की जा सकती है। C++ प्रोग्राम उदाहरण next; } while (ptr != head); } int main() { insert(3); insert(1); insert(7); insert(2); insert(9); c