Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में प्लस वन लिंक्ड लिस्ट

मान लीजिए कि हमारे पास एक गैर-ऋणात्मक पूर्णांक है जिसे अंकों की एक एकल लिंक की गई सूची को गैर-रिक्त के रूप में दर्शाया गया है, अब हमें पूर्णांक में प्लस वन करना होगा। हम मान सकते हैं कि पूर्णांक में कोई अग्रणी शून्य नहीं है, केवल संख्या 0 को छोड़कर। लिंक की गई सूची में सबसे महत्वपूर्ण अंक सूची के शीर्ष पर होता है।

इसलिए, अगर इनपुट [1,2,3] जैसा है, तो आउटपुट [1,2,4]

. होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • अगर सिर खाली है, तो -

    • वापसी सिर

  • वक्र =सिर

  • अनुरोध =नल

  • जबकि कर्व गैर-शून्य है, करें -

    • अगर कर्व का वैल 9 के बराबर नहीं है, तो -

      • अनुरोध :=वर्तमान

    • curr :=अगला curr

  • यदि नहीं, तो अनुरोध शून्य नहीं है, तो -

    • डमी =मान 1 के साथ नया नोड

    • डमी के आगे :=सिर

    • जबकि सिर शून्य नहीं है, करें -

      • सिर का मान :=0

      • सिर :=सिर के बगल में

    • डमी लौटें

  • अन्यथा

    • अनुरोध का मान 1 तक बढ़ाएं

    • अनुरोध :=अनुरोध के बाद

    • जबकि req गैर-शून्य है, करें -

      • अनुरोध का मान :=0

      • अनुरोध :=अनुरोध के बाद

    • वापसी सिर

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें।

#include <bits/stdc++.h>
using namespace std;
class ListNode{
public:
   int val;
   ListNode *next;
   ListNode(int data){
      val = data;
      next = NULL;
   }
};
ListNode *make_list(vector<int< v){
   ListNode *head = new ListNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      ListNode *ptr = head;
      while(ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return head;
}
void print_list(ListNode *head){
   ListNode *ptr = head;
   cout << "[";
   while(ptr){
      cout << ptr->val << ", ";
      ptr = ptr->next;
   }
   cout << "]" << endl;
}
class Solution {
public:
   ListNode* plusOne(ListNode* head) {
      if (!head)
         return head;
      ListNode* curr = head;
      ListNode* req = NULL;
      while (curr) {
         if (curr->val != 9) {
            req = curr;
         }
         curr = curr->next;
      }
      if (!req) {
         ListNode* dummy = new ListNode(1);
         dummy->next = head;
         while (head) {
            head->val = 0;
            head = head->next;
         }
         return dummy;
      }
      else {
         req->val++;
         req = req->next;
         while (req) {
            req->val = 0;
            req = req->next;
         }
         return head;
      }
   }
};
main(){
   Solution ob;
   vector<int< v = {1,4,5};
   ListNode *head = make_list(v);
   print_list(ob.plusOne(head));
}

इनपुट

{1,4,5}

आउटपुट

[1, 4, 6, ]

  1. C++ में एक क्रमबद्ध लिंक्ड सूची में माध्यिका ढूँढना

    इस समस्या में, हमें N तत्वों से युक्त एक क्रमबद्ध लिंक्ड सूची दी गई है। हमारा काम एक क्रमबद्ध लिंक्ड सूची में माध्यिका खोजना . है । सॉर्ट की गई लिंक की गई सूची एक साधारण लिंक्ड सूची है जिसमें सभी तत्वों को एक विशिष्ट क्रम में क्रमबद्ध किया जाता है। उदाहरण NULL माध्यिका लिंक्ड सूची का मध्य तत्व है।

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

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

  1. सी++ में लिंक्ड सूची के वैकल्पिक नोड्स का योग

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