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

C++ में सॉर्ट की गई सर्कुलर लिंक्ड लिस्ट में डालें

मान लीजिए कि हमारे पास एक सर्कुलर लिंक्ड लिस्ट से एक नोड है जिसे बढ़ते क्रम में क्रमबद्ध किया गया है, हमें सूची में वैल्यू इंसर्टवैल डालने के लिए एक फ़ंक्शन को परिभाषित करना होगा जैसे कि यह एक क्रमबद्ध सर्कुलर सूची बनी रहे।

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

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

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

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

    • सिर:=वैल के साथ नया नोड

    • सिर के आगे :=सिर

  • अन्यथा

    • curr =सिर के आगे

    • पिछला =सिर

    • अस्थायी =वैल के साथ नया नोड

    • किया :=झूठा

    • अनंत लूपिंग करें, करें −

      • अगर वैल इन करंट>=वैल और वैल ऑफ प्रीव <=वैल, तो −

        • पिछला:=अस्थायी के बाद

        • अस्थायी :=वक्र के आगे

        • किया :=सच

        • लूप से बाहर आएं

      • अगर पिछले का वैल> करंट का वैल, तो -

        • अगर पिछला का वैल <=वैल या वैल <=कर्व का वैल, तो -

          • पिछला:=अस्थायी के बाद

          • अस्थायी :=वक्र के आगे

          • किया :=सच

          • लूप से बाहर आएं

      • यदि कर्व सिर के समान है, तो -

        • लूप से बाहर आएं

      • पिछला :=वर्तमान

      • curr :=curr के आगे

    • अगर किया गलत है, तो -

      • अस्थायी:=सिर के आगे

      • पिछला:=अस्थायी के बाद

      • सिर:=अस्थायी

  • वापसी सिर

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Node {
public:
   int val;
   Node* next;
   Node() {}
   Node(int _val) {
      val = _val;
      next = NULL;
   }
   Node(int _val, Node* _next) {
      val = _val;
      next = _next;
   }
};
class Solution {
public:
   Node* insert(Node* head, int val) {
      if(!head){
         head = new Node(val);
         head->next = head;
      }
      else{
         Node* curr = head->next;
         Node* prev = head;
         Node* temp = new Node(val);
         bool done = false;
         while(1){
            if (curr->val >= val && prev->val <= val) {
               prev->next = temp;
               temp->next = curr;
               done = true;
               break;
            }
            if (prev->val > curr->val) {
               if (prev->val <= val || val <= curr->val) {
                  prev->next = temp;
                  temp->next = curr;
                  done = true;
                  break;
               }
            }
            if (curr == head)
               break;
            prev = curr;
            curr = curr->next;
         }
         if(!done){
            temp->next = head;
            prev->next = temp;
            head = temp;
         }
      }
      return head;
   }
};
main(){
   Solution ob;
   Node *head = new Node(3);
   head->next = new Node(4);
   head->next->next = new Node(1, head);
   ob.insert(head, 2);
   Node *temp = head;
   if (head != NULL){
      do{
         cout << temp->val << " ";
         temp = temp->next;
      }
      while (temp != head);
   }
}

इनपुट

node *head = new Node(3);
head->next = new Node(4);
head->next->next = new Node(1, head);
insertVal = 2

आउटपुट

3 4 1 2

  1. लिंक की गई सूची को C++ में बाइनरी सर्च ट्री में बदलने का कार्यक्रम

    मान लीजिए कि हमारे पास एक एकल लिंक की गई सूची है जहां तत्वों को गैर-घटते क्रम में व्यवस्थित किया गया है, हमें इसे एक ऊंचाई संतुलित बाइनरी सर्च ट्री में बदलना होगा। तो अगर सूची [-10, -3, 0, 5, 9] की तरह है, तो संभावित पेड़ इस तरह होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - यदि सूची खा

  1. C++ में सर्कुलर लिंक्ड लिस्ट के नोड्स का योग

    इस समस्या में, हमें एक वृत्ताकार लिंक्ड सूची दी गई है। हमारा काम सर्कुलर लिंक्ड लिस्ट के नोड्स के योग को खोजने के लिए एक प्रोग्राम बनाना है। हमें केवल लिंक की गई सूची के सभी नोड मानों को जोड़ने की आवश्यकता है। कुछ महत्वपूर्ण परिभाषाएं लिंक्ड लिस्ट डेटा संरचनाओं का एक क्रम है, जो लिंक के माध्य

  1. C++ में सर्कुलर लिंक्ड लिस्ट में नोड्स गिनें

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