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

C++-এ রিকারসিভ ইনসারশন ও ট্রাভার্সাল লিঙ্কড লিস্ট


পূর্ণসংখ্যা মান দিয়ে একটি লিঙ্কড লিস্ট তৈরি করা হবে। কাজ হলো রিকারসিভ পদ্ধতিতে নোড ইনসার্ট করা এবং ট্রাভার্স করা।

রিকারসিভভাবে নোড যোগ করা (শেষে)

  • যদি হেড NULL হয় → হেডে নোড যোগ করুন।

  • অন্যথায় addtoEnd(head->next, data) কল করুন।

রিকারসিভভাবে নোড ট্রাভার্স করা

  • যদি হেড NULL হয় → প্রিন্ট "NULL" এবং ফেরত যান।

  • অন্যথায় ডেটা প্রিন্ট করে traverseList(head->next) কল করুন।

উদাহরণ

ইনপুট − 1 - 2 - 7 - 9 - 10

আউটপুট − লিঙ্কড লিস্ট: 1 → 2 → 7 → 9 → 10 → NULL

ইনপুট − 12 - 21 - 17 - 94 - 18

আউটপুট − লিঙ্কড লিস্ট: 12 → 21 → 17 → 94 → 18 → NULL

প্রোগ্রামে ব্যবহৃত পদ্ধতি

নোড যোগ ও ট্রাভার্সালের জন্য রিকারসিভ ফাংশন ব্যবহার করা হয়েছে।

  • SLLNode স্ট্রাকচার: int data ও SLLNode* next।

  • addtoEnd(SLLNode* head, int data) ফাংশন হেড পয়েন্টার ও ডেটা নিয়ে লিস্টের শেষে নোড যোগ করে।

  • যদি হেড NULL হয়, নতুন নোড তৈরি করে হেড হিসেবে ফেরত দিন।

  • অন্যথায় head->next = addtoEnd(head->next, data) করে রিকারসিভ কল দিন।

  • traverseList(SLLNode* head) ফাংশন হেড থেকে শুরু করে প্রতিটি মান প্রিন্ট করে।

  • যদি হেড NULL হয়, "NULL" প্রিন্ট করে ফেরত যান।

  • অন্যথায় ডেটা প্রিন্ট করে traverseList(head->next) কল করুন।

  • main-এ addtoEnd() দিয়ে লিস্ট তৈরি করে traverseList() দিয়ে প্রিন্ট করুন।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

struct SLLNode {
    int data;
    SLLNode* next;
};

SLLNode* addtoEnd(SLLNode* head, int data){
    if (head == NULL){
        SLLNode *nodex = new SLLNode;
        nodex->data = data;
        nodex->next = NULL;
        return nodex;
    }
    else{
        head->next = addtoEnd(head->next, data);
    }
    return head;
}

void traverseList(SLLNode* head){
    if (head == NULL){
        cout << "NULL";
        return;
    }
    cout << head->data << " -> ";
    traverseList(head->next);
}

int main(){
    SLLNode* head1 = NULL;
    head1 = addtoEnd(head1, 1);
    head1 = addtoEnd(head1, 8);
    head1 = addtoEnd(head1, 56);
    head1 = addtoEnd(head1, 12);
    head1 = addtoEnd(head1, 34);
    cout << "Linked List is :" << endl;
    traverseList(head1);
    return 0;
}

আউটপুট

উপরের কোড রান করলে নিচের আউটপুট পাওয়া যাবে:

Linked List is : 1 -> 8 -> 56 -> 12 -> 34 -> NULL
  1. C++-এ সর্টেড ও রোটেটেড লিংকড লিস্টে রোটেশনের সংখ্যা গণনা

  2. লিংকড লিস্টকে K প্লেস ডান দিকে ঘুরানো (Rotate) C++-এ

  3. C++-এ লিংকড লিস্ট জাম্প (Linked List Jumps) প্রোগ্রাম

  4. সি++-এ লিংকড লিস্টের অল্টারনেট নোডগুলোর যোগফল