কম্পিউটার

C++ এ প্লাস ওয়ান লিঙ্কড তালিকা


ধরুন আমাদের কাছে একটি অ-ঋণাত্মক পূর্ণসংখ্যা রয়েছে যা অ-খালি হিসাবে উপস্থাপিত সংখ্যাগুলির এককভাবে লিঙ্কযুক্ত তালিকা, এখন আমাদের পূর্ণসংখ্যার সাথে এক যোগ করতে হবে। আমরা অনুমান করতে পারি যে পূর্ণসংখ্যাতে 0 নম্বরটি ছাড়া কোনো অগ্রণী শূন্য নেই। লিঙ্ক করা তালিকায় সবচেয়ে তাৎপর্যপূর্ণ সংখ্যাটি তালিকার শীর্ষে রয়েছে।

সুতরাং, ইনপুট যদি [1,2,3] এর মত হয়, তাহলে আউটপুট হবে [1,2,4]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • যদি মাথা শূন্য হয়, তাহলে −

    • রিটার্ন হেড

  • curr =মাথা

  • req =NULL

  • যখন curr অ-শূন্য হয়, −

    করুন
    • যদি curr এর val 9 এর সমান না হয়, তাহলে −

      • req :=curr

    • curr :=curr এর পরবর্তী

  • যদি req অ-শূন্য হয়, তাহলে −

    • ডামি =মান 1

      সহ নতুন নোড
    • ডামির পরের :=মাথা

    • যখন হেড অ-শূন্য হয়, −

      করুন
      • মাথার মান :=0

      • মাথা :=মাথার পাশে

    • ফেরত ডামি

  • অন্যথায়

    • অনুরোধের মান 1 দ্বারা বৃদ্ধি করুন

    • req :=req এর পরবর্তী

    • যখন req অ-শূন্য, −

      করুন
      • অনুরোধের মান :=0

      • req :=req এর পরবর্তী

    • রিটার্ন হেড

উদাহরণ

আরও ভালোভাবে বোঝার জন্য আসুন আমরা নিম্নলিখিত বাস্তবায়ন দেখি।

#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++ এ লিঙ্ক করা তালিকায় প্রথম অ-পুনরাবৃত্তি

  2. C++ এ বাছাই করা লিঙ্কযুক্ত তালিকায় মিডিয়ান খোঁজা

  3. C++ এ একটি লিঙ্কযুক্ত তালিকা সমতল করা

  4. C++ এ লিঙ্ক করা তালিকার বিকল্প নোডের যোগফল