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

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

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

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

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

Input:1999
Output:2000

स्पष्टीकरण

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

  • लिंक की गई सूची को उलटना:आपको लिंक की गई सूची को उलटने की आवश्यकता है, जिसका अर्थ है कि अंतिम अंक को पहले और पहले से अंतिम में बदलना। उदाहरण के लिए, 1-> 9-> 9 -> 9 को 9-> 9 -> 9 ->1 में बदल दिया जाता है।
  • इस परिवर्तित लिंक्ड सूची के लिए अब सूची को पार करें, सबसे बाईं ओर के नोड में एक जोड़ें। यदि इस नोड का मान 9 के बराबर है तो अगले नोड के लिए एक कैरी का प्रचार करें। यही प्रक्रिया तब तक करें जब तक कैरी न हो जाए।
  • स्ट्रिंग को मूल रूप में वापस उलट दें और फिर स्ट्रिंग मुद्रित करने के लिए सिर वापस कर दें।

उदाहरण

#include <iostream>
using namespace std;
//n=next node ; d=data ; p= previous node; h=head node; c=current node
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<<endl;
   return 0;
}

  1. सी भाषा में लिंक्ड सूची की अवधारणा की व्याख्या करें

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

  1. C++ में एक बहुस्तरीय लिंक्ड सूची को समतल करें

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

  1. रूबी में प्रैक्टिकल लिंक्ड लिस्ट

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