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

C++ में सॉर्टेड सर्कुलर लिंक्ड लिस्ट में सम्मिलित करें


मान लीजिए हमारे पास एक सर्कुलर लिंक्ड लिस्ट का एक नोड है जो बढ़ते क्रम में सॉर्टेड है, हमें एक फ़ंक्शन परिभाषित करना है जो मान insertVal को लिस्ट में सम्मिलित करे ताकि यह एक सॉर्टेड सर्कुलर लिस्ट बनी रहे।

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

हल करने की विधि

हम निम्न चरणों का पालन करेंगे:

  • यदि हेड null है, तो मान के साथ नया नोड बनाएं, उसका next खुद पर सेट करें, और लौटाएं।
  • अन्यथा:
    • curr = head->next, prev = head लें।
    • मान के साथ नया नोड temp बनाएं।
    • done = false।
    • अनंत लूप चलाएं:
      • यदि curr->val >= val और prev->val <= val, तो temp को prev और curr के बीच सम्मिलित करें, done = true, ब्रेक।
      • यदि prev->val > curr->val (रैप-अराउंड बिंदु), तो यदि prev->val <= val या val <= curr->val, तो temp को सम्मिलित करें, done = true, ब्रेक।
      • यदि curr == head, तो ब्रेक।
      • prev = curr, curr = curr->next।
    • यदि done false है, तो temp को हेड के बाद सम्मिलित करें और हेड को temp पर सेट करें।
  • हेड लौटाएं।

उदाहरण

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

#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++ में लिंक्ड लिस्ट को बाइनरी सर्च ट्री में बदलें - ऊंचाई संतुलित C++ में लिंक्ड लिस्ट को बाइनरी सर्च ट्री में बदलें - ऊंचाई संतुलित

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

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

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

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

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