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

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


समस्या विवरण

कार्य लिंक्ड लिस्ट के अंत से शुरू होने वाले नोड्स को प्रिंट करना है बिना अतिरिक्त स्पेस का उपयोग किए, जिसका अर्थ है कि कोई अतिरिक्त वेरिएबल नहीं होना चाहिए, इसके बजाय हेड पॉइंटर जो पहले नोड को इंगित करता है, को स्थानांतरित किया जाएगा।

उदाहरण

इनपुट: 10 21 33 42 89
आउटपुट: 89 42 33 21 10

एल्गोरिदम

शुरुआत
चरण 1: नोड वेरिएबल को संरचना के प्रकार का बनाएं
    int data घोषित करें
    *next का उपयोग करके नोड प्रकार का पॉइंटर घोषित करें
चरण 2: int get(struct node* head) फंक्शन घोषित करें
    int count = 0 वेरिएबल घोषित करें
    struct node *newme = head घोषित करें
    जब तक newme != NULL लूप
        count को 1 से बढ़ाएं
        newme = newme->next सेट करें
    अंत
    count वापस करें
चरण 3: void push(node** headref, char newdata) फंक्शन घोषित करें
    malloc का उपयोग करके मेमोरी आवंटित करें
    newnode->data = newdata सेट करें
    newnode->next = (*headref) सेट करें
    (*headref) = newnode सेट करें
चरण 4: int getN(struct node* head, int n) फंक्शन घोषित करें
    struct node* cur = head घोषित करें
    i = 0 से n-2 तक लूप और cur != NULL
        cur = cur->next सेट करें
    अंत
    cur->data वापस करें
चरण 5: void reverse(node *head) फंक्शन घोषित करें
    int n = get(head) घोषित करें
    i = n से 1 तक लूप
        getN(head, i) प्रिंट करें
    अंत
चरण 6: main() में
    node* head = NULL का उपयोग करके लिस्ट बनाएं
    push(&head, 89) के माध्यम से तत्व डालें
    reverse(head) कॉल करें
रोकें

C प्रोग्राम उदाहरण

#include <stdio.h>
#include <stdlib.h>

struct node {
    int data;
    struct node* next;
};

void push(struct node** headref, int newdata) {
    struct node* newnode = (struct node*) malloc(sizeof(struct node));
    newnode->data = newdata;
    newnode->next = (*headref);
    (*headref) = newnode;
}

int get(struct node* head) {
    int count = 0;
    struct node* newme = head;
    while (newme != NULL){
        count++;
        newme = newme->next;
    }
    return count;
}

int getN(struct node* head, int n) {
    struct node* cur = head;
    for (int i = 0; i < n-1 && cur != NULL; i++)
        cur = cur->next;
    return cur->data;
}

void reverse(node *head) {
    int n = get(head);
    for (int i = n; i >= 1; i--)
        printf("%d ", getN(head, i));
}

int main() {
    struct node* head = NULL;
    push(&head, 89);
    push(&head, 42);
    push(&head, 33);
    push(&head, 21);
    push(&head, 10);
    reverse(head);
    return 0;
}

आउटपुट

उपरोक्त प्रोग्राम चलाने पर निम्नलिखित आउटपुट उत्पन्न होगा:

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

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

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

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

  1. C प्रोग्राम में O(n) समय और O(1) स्पेस में ऐरे का बायां रोटेशन प्रिंट करें C प्रोग्राम में O(n) समय और O(1) स्पेस में ऐरे का बायां रोटेशन प्रिंट करें

    समस्या विवरण हमें कुछ आकार n का एक ऐरे और कई पूर्णांक मान दिए गए हैं, हमें दिए गए इंडेक्स k से ऐरे को रोटेट करना होगा। उदाहरण इनपुट: arr[] = {1, 2, 3, 4, 5} K1 = 1, K2 = 3, K3 = 6 आउटपुट: 2 3 4 5 1 4 5 1 2 3 2 3 4 5 1 एल्गोरिदम शुरुआत चरण 1: void leftRotate(int arr[], int n, int k) फंक्शन घोषित क