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

C#-এ সিঙ্গলি লিঙ্কড লিস্ট ট্রাভার্সাল (LinkedList<T>)

C#-এ System.Collections.Generic.LinkedList<T> একটি ডাবলি-লিঙ্কড লিস্ট ইমপ্লিমেন্টেশন। যদিও নামে "সিঙ্গলি" নেই, এটি সহজে ট্রাভার্স করা যায়। এখানে বেসিক অপারেশনগুলো দেখানো হলো।

LinkedList ঘোষণা এবং উপাদান যোগ করা

using System;
using System.Collections.Generic;

var linkedList = new LinkedList<string>();

// শেষে যোগ করা
linkedList.AddLast("Tim");
linkedList.AddLast("Tom");

// প্রথমে যোগ করা
linkedList.AddFirst("First");

// নির্দিষ্ট নোডের আগে/পরে যোগ করা
var node = linkedList.Find("Tim");
if (node != null)
{
    linkedList.AddAfter(node, "After Tim");
    linkedList.AddBefore(node, "Before Tim");
}

ট্রাভার্সাল (Traversal) পদ্ধতিগুলো

১. foreach লুপ (সর্বাধিক সহজ)

foreach (var item in linkedList)
{
    Console.WriteLine(item);
}

২. নোড-বেসড ট্রাভার্সাল (ফরওয়ার্ড)

var current = linkedList.First;
while (current != null)
{
    Console.WriteLine(current.Value);
    current = current.Next;
}

৩. নোড-বেসড ট্রাভার্সাল (ব্যাকওয়ার্ড)

var current = linkedList.Last;
while (current != null)
{
    Console.WriteLine(current.Value);
    current = current.Previous;
}

সম্পূর্ণ উদাহরণ

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main(string[] args)
    {
        var list = new LinkedList<string>();
        
        list.AddLast("Tim");
        list.AddLast("Tom");
        list.AddLast("Jerry");
        list.AddFirst("Start");

        Console.WriteLine("ফরওয়ার্ড ট্রাভার্সাল:");
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }

        Console.WriteLine("\nব্যাকওয়ার্ড ট্রাভার্সাল (নোড ব্যবহার):");
        var node = list.Last;
        while (node != null)
        {
            Console.WriteLine(node.Value);
            node = node.Previous;
        }

        Console.WriteLine($"\nমোট নোড: {list.Count}");
        Console.WriteLine($"প্রথম: {list.First?.Value}");
        Console.WriteLine($"শেষ: {list.Last?.Value}");
    }
}

আউটপুট

ফরওয়ার্ড ট্রাভার্সাল:
Start
Tim
Tom
Jerry

ব্যাকওয়ার্ড ট্রাভার্সাল (নোড ব্যবহার):
Jerry
Tom
Tim
Start

মোট নোড: 4
প্রথম: Start
শেষ: Jerry

সাধারণ অপারেশন এবং জটিলতা

অপারেশনটাইম কমপ্লেক্সিটিব্যাখ্যা
AddFirst/LastO(1)হেড/টেইলে যোগ
AddBefore/AfterO(1)নোড রেফারেন্স দেওয়া থাকলে
Find(value)O(n)লিনিয়ার সার্চ
Remove(value)O(n)ফাইন্ড + রিমুভ
Remove(node)O(1)নোড রেফারেন্স দেওয়া থাকলে
ট্রাভার্সালO(n)সব নোড ভিজিট

LinkedList vs List<T> - কবে কী ব্যবহার করবেন

  • List<T>: র‍্যান্ডম অ্যাক্সেস (ইন্ডেক্সার), ক্যাশে-ফ্রেন্ডলি, ছোট-মাঝারি সাইজের জন্য ভালো।
  • LinkedList<T>: ঘন ঘন ইনসারশন/ডিলিশন মিডলে, বড় ডেটা, মেমরি ফ্র্যাগমেন্টেশন এড়াতে।
  • Queue<T>/Stack<T>: FIFO/LIFO সেমান্টিক্সের জন্য স্পেশালাইজড।
নোট: C#-এ বিল্ট-ইন সিঙ্গলি-লিঙ্কড লিস্ট নেই। LinkedList<T> ডাবলি-লিঙ্কড। সিঙ্গলি লিঙ্কড লিস্ট বানাতে হলে কাস্টম নোড ক্লাস লিখতে হয়।
  1. C#-এ ফাইল সার্চ করা (DirectoryInfo.GetFiles)

  2. C#-এ সিঙ্গলি লিংকড লিস্টে ট্রাভার্সাল ইমপ্লিমেন্ট করা

  3. C#-এ LinkedList

  4. C#-এ Stack রিভার্স করা (দুটি Stack ব্যবহার করে)