একটি লিঙ্কড লিস্টে যাদুকর পূর্ণসংখ্যা এবং শূন্য থাকলে, সকল শূন্যকে লিস্টের শুরুতে নিয়ে আসতে হবে।
উদাহরণ
ইনপুট: 3→0→1→0→0→1→0→0→3→NULL
আউটপুট: 0→0→0→0→0→3→1→1→3→NULL
অ্যালগরিদম
- লিস্ট ট্রাভার্স করুন,
prevএবংcurrপয়েন্টার রেখে। - যদি
curr->data == 0হয়, তবে সেটিকে নতুন হেড বানান। prev->next = curr->nextকরুন।curr->next = head; head = curr;করুন।currআপডেট করুন।
সি++ ইমপ্লিমেন্টেশন
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node* next;
};
void addNewNode(Node** head, int data) {
Node* newNode = new Node{data, *head};
*head = newNode;
}
void moveZeroesToFront(Node** head) {
if (!*head) return;
Node *prev = *head, *curr = (*head)->next;
while (curr) {
if (curr->data == 0) {
Node* temp = curr;
curr = curr->next;
prev->next = curr;
temp->next = *head;
*head = temp;
} else {
prev = curr;
curr = curr->next;
}
}
}
void printList(Node* node) {
while (node) { cout << node->data << "->"; node = node->next; }
cout << "NULL" << endl;
}
int main() {
Node* head = nullptr;
int vals[] = {3, 0, 1, 0, 0, 1, 0, 0, 3};
for (int i = 8; i >= 0; i--) addNewNode(&head, vals[i]);
moveZeroesToFront(&head);
printList(head);
return 0;
}
আউটপুট
0->0->0->0->0->3->1->1->3->NULL