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/Last | O(1) | হেড/টেইলে যোগ |
AddBefore/After | O(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> ডাবলি-লিঙ্কড। সিঙ্গলি লিঙ্কড লিস্ট বানাতে হলে কাস্টম নোড ক্লাস লিখতে হয়।