Linked List
Linked list क्या है?
Array अपने items को fixed size के साथ memory में साथ रखता है। Linked list अलग तरीका अपनाती है: यह items को अलग-अलग छोटे blocks (nodes) में रखती है, और उन्हें pointers से जोड़ती है। हर node अगले की ओर इशारा करता है, एक श्रृंखला बनाते हुए।
बड़ा फ़ायदा है लचीलापन — linked list program चलते समय एक-एक node बढ़ और घट सकती है, बिना पहले से size तय किए।
Node: बुनियादी इकाई
Node एक struct है जिसमें दो हिस्से हैं: data, और अगले node का pointer।
struct Node {
int data; // value
struct Node *next; // agle node ka address
};next pointer ही एक node को दूसरे से जोड़ता है। आख़िरी node में next को NULL set करते हैं जो कहता है "list यहाँ खत्म।"
एक छोटी list बनाना
चलिए malloc से तीन nodes बनाएँ और जोड़ें: 10 → 20 → 30।
#include <stdio.h>
#include <stdlib.h>
struct Node { int data; struct Node *next; };
int main() {
struct Node *head = malloc(sizeof(struct Node));
struct Node *second = malloc(sizeof(struct Node));
struct Node *third = malloc(sizeof(struct Node));
head->data = 10; head->next = second;
second->data = 20; second->next = third;
third->data = 30; third->next = NULL; // ant
return 0;
}अब head एक श्रृंखला शुरू करता है: 10, 20 की ओर, 20, 30 की ओर, और 30 NULL की ओर।
Print करने के लिए traverse
Linked list पढ़ने के लिए head से शुरू करें और next का पीछा करें जब तक NULL न मिले।
struct Node *temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next; // agle node par jaayein
}
printf("NULL\n");10 -> 20 -> 30 -> NULL
List को head के बजाय temp जैसी copy से चलें। अगर आप head हिला देंगे, तो अपनी list की शुरुआत हमेशा के लिए खो देंगे।
अंत में insert करना
अंत में node जोड़ने के लिए आख़िरी node तक चलें और उसके next को नए node पर point कराएँ।
void append(struct Node *head, int value) {
struct Node *n = malloc(sizeof(struct Node));
n->data = value;
n->next = NULL;
struct Node *temp = head;
while (temp->next != NULL) // aakhri node dhoondhein
temp = temp->next;
temp->next = n; // jod dein
}यह उस node तक चलता है जिसका next NULL है, फिर नया node वहाँ जोड़ देता है।
Linked list बनाम array
| बिंदु | Array | Linked list |
|---|---|---|
| Size | Fixed | Run time पर बढ़ती/घटती |
| Memory | लगातार (contiguous) | बिखरी, pointers से जुड़ी |
| Index से पहुँच | तुरंत | शुरू से चलना |
| बीच में insert/delete | महँगा (shifting) | सस्ता (pointers relink) |
आम गलतियाँ
- आख़िरी node का
nextNULL set करना भूलना, जिससे traversal कभी नहीं रुकता। - List को
headसे चलाकर शुरुआत खो देना। - नए node को इस्तेमाल करने से पहले
mallocको NULL के लिए न जाँचना। - Nodes
freeकरना भूलना, जिससे memory leaks होते हैं।
1 → 2 → 3 की list बनाएँ, print करें, फिर एक count function लिखें जो list traverse करके बताए कि उसमें कितने nodes हैं। पुष्टि करें कि यह 3 print करता है।
सारांश
- Linked list nodes की श्रृंखला है, हर एक data और
nextpointer रखता है। - आख़िरी node का
nextNULLहोता है जो अंत दर्शाता है। - Nodes
mallocसे बनते हैं ताकि list run time पर बढ़े। headसेnextका पीछा करकेNULLतक traverse करें।- लचीले size और सस्ते inserts में lists arrays से बेहतर हैं, पर तुरंत index पहुँच नहीं देतीं।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C में linked list क्या है?
Linked list में node क्या है?
struct होता है जिसमें दो हिस्से हैं: जो data आप रखना चाहते हैं, और एक pointer (अक्सर next) जो अगले node का address रखता है। आख़िरी node का next NULL होता है जो अंत दर्शाता है।Linked list array से कैसे अलग है?
Linked lists malloc क्यों इस्तेमाल करती हैं?
malloc से बनाया जाता है, जो heap पर नई memory का pointer लौटाता है। यही list को ज़रूरत अनुसार एक-एक node बढ़ने देता है।Linked list के अंत तक कैसे पहुँचते हैं?
next pointer का पीछा करते रहते हैं जब तक ऐसा node न मिले जिसका next NULL हो। वह NULL आख़िरी node दर्शाता है, इसलिए traversal loop वहीं रुक जाता है।