एक लिंक्ड लिस्ट एक रैखिक डेटा संरचना है जिसमें कई नोड्स होते हैं जो एक दूसरे से जुड़े होते हैं। प्रत्येक नोड में दो फील्ड होते हैं - डेटा फील्ड और अगले नोड का पता।
मान लीजिए हमारे पास एक सिंगली लिंक्ड लिस्ट है और हमें इस लिंक्ड लिस्ट से पहले नोड को हटाने की आवश्यकता है। उदाहरण के लिए,
इनपुट 1 - 4 → 3 → 2 → 1
आउटपुट - 3 → 2 → 1 →
व्याख्या - '4' दी गई सिंगली लिंक्ड लिस्ट में पहला नोड है। पहले नोड को हटाने के बाद, लिंक्ड लिस्ट 3→2→1 होगी।
इनपुट 2 - 1 → 2 → 3 →
आउटपुट - 2 → 3 →
व्याख्या - पहले नोड '1' को हटाने के बाद, लिंक्ड लिस्ट 2 → 3 होगी।
इस प्रॉब्लम को हल करने का दृष्टिकोण
प्रारंभ में, हमारे पास एक लिंक्ड लिस्ट है जिसमें नोड्स होते हैं। प्रत्येक नोड में डेटा और अगले नोड का पता होता है। लिंक्ड लिस्ट में डेटा डालने के बाद, हम पहले नोड को हटाने के लिए एक फंक्शन बनाएंगे।
इस प्रकार, हम एक अस्थायी पॉइंटर बनाएंगे जो प्रारंभ में हेड की ओर इशारा करता है और हेड को अगले नोड पर ले जाएंगे। अब अस्थायी नोड को हटाएं और लिंक्ड लिस्ट लौटाएं।
एक फंक्शन deleteAtHead(node*& head) हेड का पॉइंटर लेता है और लिंक्ड लिस्ट के पहले नोड को हटाता है।
एक अस्थायी पॉइंटर बनाएं जो प्रारंभ में हेड की ओर इशारा करता है।
हेड अगले नोड पर जाता है।
अस्थायी पॉइंटर को हटाएं।
लिंक्ड लिस्ट लौटाएं।
उदाहरण
#include <iostream>
using namespace std;
class node {
public:
int data;
node* next;
node(int d) {
data = d;
next = NULL;
}
};
void insertAtFirstNode(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;
}
cout << endl;
}
void deleteAtFirst(node*& head) {
if (head == NULL) {
return;
}
node* temp = head;
head = head->next;
delete temp;
return;
}
int main() {
node* head = NULL;
insertAtFirstNode(head, 1);
insertAtFirstNode(head, 2);
insertAtFirstNode(head, 3);
insertAtFirstNode(head, 4);
deleteAtFirst(head);
print(head);
}
आउटपुट
उपरोक्त कोड चलाने पर निम्न आउटपुट उत्पन्न होगा,
3 → 2 → 1 →
चूंकि दी गई सिंगली लिंक्ड लिस्ट 4 → 3 → 2 → 1 → है, पहले नोड को हटाने के बाद जो 4 है, लिंक्ड लिस्ट 3 → 2 → 1 → बन जाएगी।