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

लिंक्ड लिस्ट के रूप में दर्शाई गई संख्या में 1 जोड़ें?


एक संख्या का लिंक्ड लिस्ट प्रतिनिधित्व इस तरह प्रदान किया जाता है कि लिंक्ड लिस्ट के सभी नोड्स को संख्या के एक अंक के रूप में माना जाता है। नोड संख्या को इस तरह संग्रहीत करता है कि लिंक्ड लिस्ट का पहला एलिमेंट संख्या का सबसे महत्वपूर्ण अंक (most significant digit) रखता है, और लिंक्ड लिस्ट का अंतिम एलिमेंट सबसे कम महत्वपूर्ण बिट (least significant bit) रखता है। उदाहरण के लिए, संख्या 202345 को लिंक्ड लिस्ट में (2->0->2->3->4->5) के रूप में दर्शाया गया है।

और इस लिंक्ड लिस्ट द्वारा दर्शाई गई संख्या में 1 जोड़ने के लिए हमें लिस्ट के सबसे कम महत्वपूर्ण बिट के मान की जांच करनी होगी। यदि यह 9 से कम है तो ठीक है अन्यथा कोड अगले अंक को बदलेगा और इसी तरह आगे।

आइए एक उदाहरण देखें कि इसे कैसे करना है, 1999 को (1->9->9->9) के रूप में दर्शाया गया है और इसमें 1 जोड़ने पर यह (2->0->0->0) में बदल जाना चाहिए।

Input:1999 Output:2000

व्याख्या

लिंक्ड लिस्ट के रूप में दर्शाई गई दी गई संख्या में 1 जोड़ने के लिए कुछ चरणों का पालन करना होगा, जो हैं:

  • लिंक्ड लिस्ट को उलटना: आपको लिंक्ड लिस्ट को उलटना होगा जिसका अर्थ है अंतिम अंक को पहले और पहले को अंतिम में बदलना। उदाहरण के लिए, 1->9->9->9, 9->9->9->1 में बदल जाता है।

  • इस बदली हुई लिंक्ड लिस्ट के लिए अब लिस्ट को पार करें, बाएं-most नोड में 1 जोड़ें। यदि इस नोड का मान 9 के बराबर है तो अगले नोड में कैरी प्रचारित करें। वही प्रक्रिया तब तक करें जब तक कैरी मौजूद है।

  • स्ट्रिंग को मूल रूप में वापस उलटें और फिर प्रिंट करने के लिए हेड लौटाएं।

उदाहरण

#include <iostream>
using namespace std;
//n=अगला नोड ; d=डेटा ; p= पिछला नोड; h=हेड नोड; c=वर्तमान नोड
class Node {
    public:
        int d;
        Node* n;
};
Node *newNode(int d) {
    Node *new_node = new Node;
    new_node->d = d;
    new_node->n = NULL;
    return new_node;
}
Node *reverse(Node *h) {
    Node * p = NULL;
    Node * c = h;
    Node * n;
    while (c != NULL) {
        n = c->n;
        c->n = p;
        p = c;
        c = n;
    }
    return p;
}
Node *addOneUtil(Node *h) {
    Node* res = h;
    Node *temp, *p = NULL;
    int carry = 1, sum;
    while (h != NULL) {
        sum = carry + h->d;
        carry = (sum >= 10)? 1 : 0;
        sum = sum % 10;
        h->d = sum;
        temp = h;
        h = h->n;
    }
    if (carry > 0)
        temp->n = newNode(carry);
    return res;
}
Node* addOne(Node *h) {
    h = reverse(h);
    h = addOneUtil(h);
    return reverse(h);
}
int main() {
    Node *h = newNode(1);
    h->n = newNode(9);
    h->n->n = newNode(9);
    h->n->n->n = newNode(9);
    h = addOne(h);
    while (h != NULL) {
        cout << h->d;
        h = h->n;
    }
    cout<

  1. C भाषा में लिंक्ड लिस्ट की अवधारणा C भाषा में लिंक्ड लिस्ट की अवधारणा

    लिंक्ड लिस्ट समझने से पहले, आइए C प्रोग्रामिंग भाषा में एरे के नुकसान और पॉइंटर्स के फायदों के बारे में जानें। एरे के नुकसान इसमें स्टेटिक मेमोरी एलोकेशन शामिल है। एरे में मेमोरी की बर्बादी हो सकती है। मेमोरी की कमी एरे का एक महत्वपूर्ण नुकसान है। पॉइंटर्स के फायदे इसमें डायनामिक मेमोरी एलोकेश

  1. C++ में मल्टीलेवल लिंक्ड सूची को समतल करना C++ में मल्टीलेवल लिंक्ड सूची को समतल करना

    इस समस्या में, हमें एक मल्टीलेवल लिंक्ड सूची दी गई है। हमारा कार्य मल्टीलेवल लिंक्ड सूची को समतल करने के लिए एक प्रोग्राम बनाना है। समतल करने का ऑपरेशन इस तरह से किया जाता है कि पहले स्तर के नोड्स पहले लिंक्ड सूची में आएंगे और फिर दूसरे स्तर के नोड्स आएंगे। मल्टीलेवल लिंक्ड सूची एक बहुआयामी डेटा संर

  1. रूबी में लिंक्ड लिस्ट्स में महारत: एक व्यावहारिक मार्गदर्शिका रूबी में लिंक्ड लिस्ट्स में महारत: एक व्यावहारिक मार्गदर्शिका

    यह रूबी में व्यावहारिक कंप्यूटर विज्ञान श्रृंखला में तीसरी प्रविष्टि है! आज हम लिंक्ड लिस्ट के बारे में बात करने जा रहे हैं। तो लिंक्ड लिस्ट क्या है? नाम के अनुसार, लिंक्ड लिस्ट डेटा को सूची प्रारूप में संग्रहीत करने का एक तरीका है (धन्यवाद, कैप्टन ऑब्वियस!)। लिंक्ड भाग इस तथ्य से आता है कि डेटा एक