৭-৮ঃ Sort Singly Linked List

এবার আমরা লিঙ্কড লিস্ট সর্ট করা দেখব সিলেকশন সর্ট দিয়ে।

আমরা এরে যেভাবে সর্ট করেছিলাম সিলেকশন সর্ট দিয়ে সেইমভাবে আমরা একটি লিঙ্কড লিস্ট ও সর্ট করে ফেলতে পারব। আমরা শুরুতে সিলেকশন সর্ট দিয়ে এরে সর্ট করার কোডটা একটু মনে করি।


for(int i=0;i<n-1;i++)      // নেস্টেড লুপ চালিয়ে প্রতিটি এলিমেন্ট এর সাথে প্রতিটি এলিমেন্ট কম্পেয়ার করা হচ্ছে। 
{
    for(int j=i+1;j<n;j++)
    {
        if(a[i]>a[j])        // যদি পূর্বের ভেলুটি পরের ভেলু থেকে বড় হয়ে যায় তারমানে এরেটি সর্টেড নেই।
        {
            swap(a[i],a[j]);    // তখন আমরা ভেলু দুটো সোয়াপ করে দিচ্ছি যেন সর্টেড হয়ে যায়। 
        }
    }
}

এবার আমরা এই কোডটিকে লিঙ্কড লিস্টে কনভার্ট করি। for(int i=0;i<n-1;i++) int i=0 -> Node *i = head [ এখানে একটি পয়েন্টার নিয়ে তাতে হেড রেখে দিচ্ছি ] i<n-1 -> i->next != NULL [ i<n-1 দিয়ে আমরা লাস্টের আগের ইন্ডেক্স পর্যন্ত যাচ্ছিলাম, i->next != NULL দিয়ে আমরা লাস্টের আগের নোড পর্যন্ত যাচ্ছি ] i++ -> i = i->next [ i++ দিয়ে আমরা ইন্ডেক্স কে সামনে আগাচ্ছিলাম, i = i->next দিয়ে আমরা পয়েন্টার কে নেক্সট নোডে অর্থাৎ সামনে আগাচ্ছি ] int j=i+1 -> Node *j = i->next [ int j=i+1 দিয়ে আমরা নতুন ভেরিয়েবল নিয়েছিলাম যা শুরু হচ্ছিল i এর পরের ইন্ডেক্স থেকে, Node *j = i->next দিয়ে আমরা নতুন পয়েন্টার নিয়েছি যা শুরু হচ্ছে i এর পরের নোড থেকে ] j<n -> j != NULL [ j<n দিয়ে আমরা লাস্ট ইন্ডেক্স পর্যন্ত যাচ্ছিলাম, j != NULL দিয়ে আমরা লাস্ট নোড পর্যন্ত যাচ্ছি ] j++ -> j = j->next [ j++ দিয়ে আমরা ইন্ডেক্স কে সামনে আগাচ্ছিলাম, j = j->next দিয়ে আমরা পয়েন্টার কে নেক্সট নোডে অর্থাৎ সামনে আগাচ্ছি ] a[i],a[j] -> i->val, j->val [ a[i],a[j] দিয়ে আমরা এরেতে i,j ইন্ডেক্সে থাকা ভেলু এক্সেস করছিলাম, i->val, j->val দিয়ে আমরা i,j পয়েন্টারে থাকা ভেলু এক্সেস করছি।

সম্পুরন কোডঃ

#include <bits/stdc++.h>
using namespace std;
class Node
{
public:
    int val;
    Node *next;
    Node(int val)
    {
        this->val = val;
        this->next = NULL;
    }
};
void insert_tail(Node *&head, Node *&tail, int val)
{
    Node *newNode = new Node(val);
    if (head == NULL)
    {
        head = newNode;
        tail = newNode;
        return;
    }
    tail->next = newNode;
    tail = newNode;
}
void print_linekd_list(Node *head)
{
    Node *tmp = head;
    while (tmp != NULL)
    {
        cout << tmp->val << " ";
        tmp = tmp->next;
    }
    cout << endl;
}
int main()
{
    Node *head = NULL;
    Node *tail = NULL;
    int val;
    while (true)
    {
        cin >> val;
        if (val == -1)
            break;
        insert_tail(head, tail, val);
    }
    for (Node *i = head; i->next != NULL; i = i->next)
    {
        for (Node *j = i->next; j != NULL; j = j->next)
        {
            if (i->val < j->val)
            {
                swap(i->val, j->val);
            }
        }
    }
    print_linekd_list(head);
    return 0;
}

ডাটা স্ট্রাকচার কোর্সের গিটবুকগুলো আপনাদের কেমন লাগছে ? আমাদেরকে জানাতে পারেন। https://forms.gle/t3uHWc3mgFRu1iTi8

Last updated