কম্পিউটার টিউটোরিয়াল

লিংকড লিস্টে বাইনারি নম্বর থেকে ইন্টিজার কনভার্সন C++-এ

সমস্যা বিবরণ

একটি সিংলি-লিংকড লিস্টের হেড রেফারেন্স দেওয়া আছে। প্রতিটি নোডের মান ০ বা ১। এই লিস্টটি একটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন ধারণ করে। এর দশমিক মান রিটার্ন করতে হবে।

উদাহরণ: লিস্ট [1,0,1,1,0,1] হলে আউটপুট ৪৫।

সমাধানের ধাপসমূহ

  • লিস্ট এলিমেন্টগুলো ভেক্টরে কনভার্ট করুন।
  • ভেক্টর রিভার্স করুন।
  • ans := 0, temp := 1
  • i = 0 থেকে size-1 পর্যন্ত: ans += x[i] * 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, temp = 1; 
        for (int i = 0; i < x.size(); i++) { 
            ans += x[i] * temp; 
            temp *= 2; 
        } 
        return ans; 
    } 
}; 

int 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. সি++-এ বাইনারি ম্যাট্রিক্সকে শূন্য ম্যাট্রিক্সে রূপান্তর করার জন্য ন্যূনতম ফ্লিপ সংখ্যা

  2. C++-এ সোর্টেড লিস্টকে বাইনারি সার্চ ট্রি (BST) তে রূপান্তর

  3. C++-এ লিংকড লিস্ট বাইনারি ট্রিতে আছে কিনা চেক করা

  4. বাইনারি ট্রি ফ্ল্যাটেন করে লিংকড লিস্ট C++-এ