एक लिंक्ड सूची एक रैखिक डेटा संरचना है जिसमें नोड्स होते हैं और प्रत्येक नोड में दो फ़ील्ड होते हैं; एक डाला जाने वाला मान या डेटा है और दूसरा फ़ील्ड अगले नोड का पता संग्रहीत करता है।
यहां हमारा काम एक लिंक्ड लिस्ट के अंत से एक नोड को हटाना है। अंतिम नोड को टेल नोड के रूप में जाना जाता है। यदि लिंक की गई सूची में कोई नोड नहीं है, तो 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; node*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 → बन जाएगी।