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

C++ में लिंक्ड लिस्ट में बाइनरी नंबर को पूर्णांक में बदलना


मान लीजिए हमारे पास एक 'head' है जो एक सिंगली-लिंक्ड लिस्ट का रेफरेंस नोड है। लिंक्ड लिस्ट में मौजूद प्रत्येक नोड का मान या तो 0 या 1 है। यह लिंक्ड लिस्ट एक संख्या का बाइनरी प्रतिनिधित्व संग्रहीत करती है। हमें लिंक्ड लिस्ट में मौजूद संख्या का दशमलव मान लौटाना है। तो यदि लिस्ट [1,0,1,1,0,1] जैसी है

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

  • x := लिस्ट तत्वों को एक सरणी में बदलें

  • फिर लिस्ट x को उल्टा करें

  • ans := 0, और temp := 1

  • i को 0 से x के आकार - 1 तक की रेंज में

    • ans := ans + x[i] * temp

    • temp := temp * 2

  • ans लौटाएं

उदाहरण (C++)

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

#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; } class Solution { public:    vector <int> getVector(ListNode* node){       vector <int> result;       while(node){          result.push_back(node->val);          node = node->next;       }       return result;    }    int getDecimalValue(ListNode* head) {       vector <int> x = getVector(head);       reverse(x.begin(), x.end());       int ans = 0;       int temp = 1;       for(int i = 0; i < x.size(); i++){          ans += x[i] * temp;          temp *= 2;       }       return ans;    } }; main(){    Solution ob;    vector<int> v = {1,0,1,1,0,1};    ListNode *head = make_list(v);    cout << ob.getDecimalValue(head); }

इनपुट

[1,0,1,1,0,1]

आउटपुट

45

  1. C++ में सॉर्टेड लिस्ट को बाइनरी सर्च ट्री में बदलना C++ में सॉर्टेड लिस्ट को बाइनरी सर्च ट्री में बदलना

    मान लीजिए हमारे पास एक सिंगली लिंक्ड लिस्ट है जहां एलिमेंट्स आरोही क्रम में सॉर्टेड हैं, हमें इसे हाइट-बैलेंस्ड BST में बदलना है। उदाहरण के लिए, अगर लिस्ट है [-10, -3, 0, 5, 9], तो संभावित ट्री होगा: इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे: अगर लिस्ट खाली है, तो नल लौटाएं sortedListToBST

  1. C++ में बाइनरी ट्री में लिंक्ड लिस्ट C++ में बाइनरी ट्री में लिंक्ड लिस्ट

    मान लीजिए हमारे पास एक बाइनरी ट्री रूट और एक लिंक्ड लिस्ट है जिसका हेड पहला नोड है। हमें True लौटाना है अगर लिंक्ड लिस्ट में हेड से शुरू होने वाले सभी एलिमेंट्स बाइनरी ट्री में किसी डाउनवर्ड पथ से मेल खाते हैं, अन्यथा False। उदाहरण के लिए, अगर ट्री है: और लिंक्ड लिस्ट [1,4,2,6] है, तो आउटपुट true

  1. C++ में बाइनरी ट्री को लिंक्ड लिस्ट में फ्लैट करना C++ में बाइनरी ट्री को लिंक्ड लिस्ट में फ्लैट करना

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें इसे स्थानांतरित (in-place) करके लिंक्ड लिस्ट में बदलना है (दायाँ पॉइंटर अगले नोड को इंगित करे, बायाँ पॉइंटर null हो)। उदाहरण: ट्री [1,2,5,3,4] → फ्लैट लिस्ट: 1→2→3→4→5 (प्रीऑर्डर ट्रैवर्सल क्रम)। रिवर्स प्रीऑर्डर ट्रैवर्सल ग्लोबल prev = null रखें। रिकर