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