একটি Stack<T> রিভার্স করতে দ্বিতীয় একটি স্ট্যাক ব্যবহার করে সব এলিমেন্ট Pop করে Push করা হয়। এটি O(n) সময় ও O(n) অতিরিক্ত স্পেস নেয়।
এলগরিদম
- মূল স্ট্যাক থেকে এলিমেন্ট
Popকরুন। - নতুন স্টাকে
Pushকরুন। - মূল স্ট্যাক খালি হয়ে যাওয়া পর্যন্ত চলতে দিন।
- নতুন স্ট্যাকটি রিভার্সড অর্ডার ধারণ করবে।
সম্পূর্ণ উদাহরণ
using System;
using System.Collections.Generic;
class StackReverseDemo
{
public static void Main()
{
Stack<char> st = new Stack<char>();
st.Push('P');
st.Push('Q');
st.Push('R');
Console.WriteLine("মূল স্ট্যাক (টপ থেকে বটম):");
foreach (char c in st) Console.Write(c + " "); // R Q P
Stack<char> rev = new Stack<char>();
while (st.Count > 0)
{
rev.Push(st.Pop());
}
Console.WriteLine("\n\nরিভার্সড স্ট্যাক (টপ থেকে বটম):");
foreach (char c in rev) Console.Write(c + " "); // P Q R
}
}
আউটপুট
মূল স্ট্যাক (টপ থেকে বটম):
R Q P
রিভার্সড স্ট্যাক (টপ থেকে বটম):
P Q R
বিকল্প পদ্ধতি (LINQ)
var reversed = new Stack<T>(originalStack.Reverse());
Stack<T> কনস্ট্রাক্টর `IEnumerable<T>` নেয়, তাই LINQ `Reverse()` সরাসরি ব্যবহার করা যায়।
জেনেরিক মেথড
public static Stack<T> Reverse<T>(Stack<T> source)
{
return new Stack<T>(source);
}
// ব্যবহার: var rev = Reverse(st);