🔴 Advanced  ·  Lesson 38

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।

C Language
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।

C Language
#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 न मिले।

C Language
struct Node *temp = head;
while (temp != NULL) {
    printf("%d -> ", temp->data);
    temp = temp->next;    // agle node par jaayein
}
printf("NULL\n");
Output:
10 -> 20 -> 30 -> NULL
💡 temp pointer इस्तेमाल करें

List को head के बजाय temp जैसी copy से चलें। अगर आप head हिला देंगे, तो अपनी list की शुरुआत हमेशा के लिए खो देंगे।

अंत में insert करना

अंत में node जोड़ने के लिए आख़िरी node तक चलें और उसके next को नए node पर point कराएँ।

C Language
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

बिंदुArrayLinked list
SizeFixedRun time पर बढ़ती/घटती
Memoryलगातार (contiguous)बिखरी, pointers से जुड़ी
Index से पहुँचतुरंतशुरू से चलना
बीच में insert/deleteमहँगा (shifting)सस्ता (pointers relink)

आम गलतियाँ

  • आख़िरी node का next NULL 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 और next pointer रखता है।
  • आख़िरी node का next NULL होता है जो अंत दर्शाता है।
  • Nodes malloc से बनते हैं ताकि list run time पर बढ़े।
  • head से next का पीछा करके NULL तक traverse करें।
  • लचीले size और सस्ते inserts में lists arrays से बेहतर हैं, पर तुरंत index पहुँच नहीं देतीं।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में linked list क्या है?
Linked list छोटे blocks (nodes) की एक श्रृंखला है, जहाँ हर node एक value और अगले node का pointer रखता है। Array के विपरीत, nodes memory में अगल-बगल नहीं रखे जाते — वे pointers से जुड़े होते हैं, इसलिए list run time पर आसानी से बढ़ और घट सकती है।
Linked list में node क्या है?
Node list का एक element है। C में यह आमतौर पर एक struct होता है जिसमें दो हिस्से हैं: जो data आप रखना चाहते हैं, और एक pointer (अक्सर next) जो अगले node का address रखता है। आख़िरी node का next NULL होता है जो अंत दर्शाता है।
Linked list array से कैसे अलग है?
Array elements को fixed, लगातार memory में साथ रखता है और index से तुरंत पहुँच देता है, पर उसका size fixed होता है। Linked list nodes बिखेरती है और उन्हें pointers से जोड़ती है, इसलिए वह स्वतंत्र रूप से बढ़ती-घटती है और सस्ते में insert करती है, पर किसी element तक पहुँचने के लिए शुरू से चलना पड़ता है।
Linked lists malloc क्यों इस्तेमाल करती हैं?
क्योंकि nodes की संख्या आमतौर पर पहले से पता नहीं होती, हर node run time पर malloc से बनाया जाता है, जो heap पर नई memory का pointer लौटाता है। यही list को ज़रूरत अनुसार एक-एक node बढ़ने देता है।
Linked list के अंत तक कैसे पहुँचते हैं?
आप head node से शुरू करते हैं और हर node के next pointer का पीछा करते रहते हैं जब तक ऐसा node न मिले जिसका next NULL हो। वह NULL आख़िरी node दर्शाता है, इसलिए traversal loop वहीं रुक जाता है।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.