Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में लिंक्ड लिस्ट को वास्तव में रिवर्स किए बिना रिवर्स प्रिंट करना


कार्य दिए गए लिंक्ड लिस्ट के रिवर्स को रिकर्सिव फंक्शन का उपयोग करके प्रिंट करना है। प्रोग्राम को रिवर्स प्रिंट करना होगा लेकिन लिस्ट को रिवर्स नहीं करना होगा यानी नोड्स का क्रम समान रहेगा।

यहां, प्रोग्राम पहले नोड का एड्रेस रखने वाले हेड पॉइंटर को अगले नोड पर तब तक ले जाएगा जब तक NULL की जांच नहीं हो जाती जो लिस्ट के अंतिम नोड में संग्रहीत होता है और हेड नोड का डेटा प्रिंट करता है।

C भाषा में लिंक्ड लिस्ट को वास्तव में रिवर्स किए बिना रिवर्स प्रिंट करना

उदाहरण

इनपुट: 29 34 43 56
आउटपुट: 56 43 34 29

सबसे पहले, नोड्स को लिस्ट में डाला जाता है और एक पॉइंटर डाले गए नोड्स को इंगित करना शुरू करेगा। अंतिम लिस्ट बनने के बाद मान लें temp पॉइंटर को पहले नोड पॉइंटर से इनिशियलाइज़ किया जाएगा और यह तब तक बढ़ता रहेगा जब तक नोड का अगला एड्रेस NULL न हो क्योंकि अंतिम नोड कुछ भी इंगित नहीं करता और अंतिम नोड से लिस्ट को हेड पॉइंटर तक ट्रैवर्स किया जाता है। यह लिस्ट को वास्तव में रिवर्स किए बिना लिस्ट का रिवर्स प्रदर्शित करेगा।

एल्गोरिदम

शुरुआत
चरण 1 → नोड वेरिएबल को संरचना टाइप का बनाएं
   int data घोषित करें
   *next का उपयोग करके नोड टाइप का पॉइंटर घोषित करें
चरण 2 → void reverse(node* head) फंक्शन घोषित करें
   यदि head == NULL तो रिटर्न
   reverse(head->next) कॉल करें
   head->data प्रिंट करें
चरण 3 → void push(node** header, char newdata) फंक्शन घोषित करें
   malloc का उपयोग करके मेमोरी आवंटित करें
   newnode->data = newdata सेट करें
   newnode->next = (*header) सेट करें
   (*header) = newnode सेट करें
चरण 4 → main() में
   node* head = NULL का उपयोग करके लिस्ट बनाएं
   push(&head, 56) के माध्यम से एलिमेंट्स डालें
   reverse(head) कॉल करें
समाप्त

उदाहरण

#include <stdio.h>
#include <stdlib.h>
// नोड के लिए संरचना बनाना
struct node {
    int data;
    node* next;
};
// लिस्ट में डेटा का रिवर्स प्रिंट करने का फंक्शन
void reverse(node* head) {
    if (head == NULL)
        return;
    reverse(head->next);
    printf("%d ", head->data);
}
// लिस्ट में नोड पुश करने का फंक्शन
void push(node** header, char newdata) {
    struct node* newnode = (struct node*)malloc(sizeof(struct node));
    newnode->data = newdata;
    newnode->next = (*header);
    (*header) = newnode;
}
int main() {
    node* head = NULL;
    push(&head, 56);
    push(&head, 43);
    push(&head, 34);
    push(&head, 29);
    reverse(head);
    return 0;
}

आउटपुट

यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा।

reverse of a linked list 56 43 34 29

  1. C भाषा में लिंक्ड लिस्ट के अंतिम k नोड्स को रिवर्स क्रम में प्रिंट करना (रिकर्सिव दृष्टिकोण) C भाषा में लिंक्ड लिस्ट के अंतिम k नोड्स को रिवर्स क्रम में प्रिंट करना (रिकर्सिव दृष्टिकोण)

    कार्य लिंक्ड लिस्ट के अंत से शुरू होने वाले k नोड्स को रिकर्सिव दृष्टिकोण का उपयोग करके प्रिंट करना है। रिकर्सिव दृष्टिकोण वह है जिसमें फंक्शन खुद को बार-बार तब तक कॉल करता है जब तक कॉल की जा रही है और इसलिए परिणाम संग्रहीत करता है। मान लें, लिस्ट में नोड्स 29, 34, 43, 56 और 88 हैं और k का मान 2

  1. C भाषा में लिंक्ड लिस्ट के वैकल्पिक नोड्स प्रिंट करना (इटरेटिव मेथड) C भाषा में लिंक्ड लिस्ट के वैकल्पिक नोड्स प्रिंट करना (इटरेटिव मेथड)

    इस समस्या में, प्रोग्राम को दी गई लिंक्ड लिस्ट से वैकल्पिक नोड्स प्रिंट करने होंगे यानी एक छोड़कर एक प्रिंट करना, इटरेटिव मेथड का उपयोग करके। इटरेटिव मेथड वह है जो आमतौर पर लूप का उपयोग करता है जो तब तक निष्पादित होता है जब तक कंडीशन का मान 1 या सत्य रहता है। मान लें, लिस्ट में नोड्स 29, 34, 43,

  1. C प्रोग्राम में अतिरिक्त स्पेस और संशोधन के बिना लिंक्ड लिस्ट का रिवर्स प्रिंट करें C प्रोग्राम में अतिरिक्त स्पेस और संशोधन के बिना लिंक्ड लिस्ट का रिवर्स प्रिंट करें

    समस्या विवरण कार्य लिंक्ड लिस्ट के अंत से शुरू होने वाले नोड्स को प्रिंट करना है बिना अतिरिक्त स्पेस का उपयोग किए, जिसका अर्थ है कि कोई अतिरिक्त वेरिएबल नहीं होना चाहिए, इसके बजाय हेड पॉइंटर जो पहले नोड को इंगित करता है, को स्थानांतरित किया जाएगा। उदाहरण इनपुट: 10 21 33 42 89 आउटपुट: 89 42 33 21 1