কম্পিউটার

C++ এ লিঙ্ক করা তালিকার সামনে সমস্ত শূন্য সরান


এলোমেলো পূর্ণসংখ্যা এবং শূন্য সহ একটি লিঙ্কযুক্ত তালিকা দেওয়া হয়েছে। আমাদের সমস্ত শূন্যকে সংযুক্ত তালিকার সামনে নিয়ে যেতে হবে। আসুন একটি উদাহরণ দেখি।

ইনপুট

3 -> 0 -> 1-> 0 -> 0 -> 1 -> 0 -> 0 -> 3 -> NULL

আউটপুট

0->0->0->0->0->3->1->1->3->NULL

অ্যালগরিদম

  • লিঙ্ক করা তালিকা শুরু করুন।
  • লিঙ্ক করা তালিকা খালি থাকলে বা এটিতে একক নোড থাকলে ফিরে আসুন।
  • কারেন্ট এবং আগের নোড ট্র্যাক করতে যথাক্রমে দ্বিতীয় নোড এবং প্রথম নোড সহ দুটি নোড শুরু করুন৷
  • লিঙ্ক করা তালিকায় পুনরাবৃত্তি করুন যতক্ষণ না আমরা শেষ পর্যন্ত পৌঁছাই।

    • যদি বর্তমান নোডটি 0 হয়, তাহলে এটিকে নতুন হেড করুন।
    • বর্তমান এবং পূর্ববর্তী নোড ভেরিয়েবলের মান আপডেট করুন।
    • নোডটিকে নতুন হেড তৈরি করলে এটি সামনের দিকে চলে যাবে।
    • আগের হেডের সাথে নতুন হেডের পরবর্তী মান আপডেট করুন।

বাস্তবায়ন

C++

-এ উপরের অ্যালগরিদমের বাস্তবায়ন নিচে দেওয়া হল
#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *next;
};
void addNewNode(struct Node **head, int data) {
   struct Node *newNode = new Node;
   newNode->data = data;
   newNode->next = *head;
   *head = newNode;
}
void moveZeroes(struct Node **head) {
   if (*head == NULL) {
      return;
   }
   struct Node *temp = (*head)->next, *prev = *head;
   while (temp != NULL) {
      if (temp->data == 0) {
         Node *current = temp;
         temp = temp->next;
         prev->next = temp;
         current->next = *head;
         *head = current;
      }else {
         prev = temp;
         temp = temp->next;
      }
   }
}
void printLinkedList(struct Node *head) {
   while (head != NULL) {
      cout << head->data << "->";
      head = head->next;
   }
   cout << "NULL" << endl;
}
int main() {
   struct Node *head = NULL;
   addNewNode(&head, 3);
   addNewNode(&head, 0);
   addNewNode(&head, 1);
   addNewNode(&head, 0);
   addNewNode(&head, 0);
   addNewNode(&head, 1);
   addNewNode(&head, 0);
   addNewNode(&head, 0);
   addNewNode(&head, 3);
   moveZeroes(&head);
   printLinkedList(head);
   return 0;
}

আউটপুট

আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।

0->0->0->0->0->3->1->1->3->NULL

  1. C++ এ সার্কুলার লিঙ্কড লিস্টের নোডের সমষ্টি

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

  3. C++ এর বিপরীতে অপরিবর্তনীয় লিঙ্কযুক্ত তালিকা প্রিন্ট করুন

  4. C++ এ রিভার্স লিঙ্কড লিস্ট II