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

C++-এ লিঙ্কড লিস্ট সেগ্রিগেট করা (Odd-Even Index Separation)


লিঙ্কড লিস্ট সেগ্রিগেশন মানে অড ইনডেক্সের নোডগুলো একসাথে এবং ইভেন ইনডেক্সের নোডগুলো একসাথে আনা (ইনডেক্স ১-ভিত্তিক)। উদাহরণ: 1→2→3→4→5 → 1→3→5→2→4

অ্যালগরিদম

  • তিনটি পয়েন্টার: oddHead, evenHead, evenStart।
  • ট্রাভার্সালের সময় odd-র next = even-র next, even-র next = odd-র next।
  • শেষে odd-র next = evenStart।
  • টাইম কমপ্লেক্সিটি: O(n), স্পেস: O(1)

উদাহরণ কোড

#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;
    Node(int d) : data(d), next(nullptr) {}
};

Node* segregateList(Node* head) {
    if (!head) return nullptr;
    
    Node *odd = head, *even = head->next, *evenHead = even;
    
    while (even && even->next) {
        odd->next = even->next;
        odd = odd->next;
        even->next = odd->next;
        even = even->next;
    }
    odd->next = evenHead;
    return head;
}

void print(Node* head) {
    while (head) {
        cout << head->data << "->";
        head = head->next;
    }
    cout << endl;
}

int main() {
    Node* head = nullptr;
    // 2→1→3→8→5 (ইনসার্ট অ্যাট হেড করলে উল্টো হয়)
    for (int x : {5, 8, 3, 1, 2}) {
        Node* n = new Node(x);
        n->next = head;
        head = n;
    }
    
    cout << "Original: "; print(head);
    head = segregateList(head);
    cout << "Segregated: "; print(head);
    return 0;
}

আউটপুট

Original: 2->1->3->8->5->
Segregated: 2->3->5->1->8->

  1. C++ দিয়ে লিংকড লিস্টে প্রথম নন-রিপিটিং এলিমেন্ট বের করা

  2. C++ দিয়ে সর্টেড লিংকড লিস্টে মেডিয়ান (Median) বের করা

  3. মাল্টিলেভেল লিংকড লিস্ট ফ্ল্যাটেন করা (C++)

  4. C++-এ একটি লিংকড লিস্ট সার্কুলার লিংকড লিস্ট কিনা চেক করা