আপনি একটি ব্যস্ত রেলওয়ে নেটওয়ার্কের জন্য ট্রেন শিডিউলিং সিস্টেম তৈরির একটি প্রকল্পে কাজ করছেন।
শিডিউলিং সিস্টেমের ট্রেন রুটগুলোর একটি প্রোটোটাইপ তৈরি করতে আপনাকে বলা হয়েছে। প্রতিটি রুট হলো ট্রেন স্টেশনগুলোর একটি ক্রম, যেখানে কোনো একটি নির্দিষ্ট ট্রেন থামে।
আপনার দল সিদ্ধান্ত নিয়েছে যে সময়সূচির প্রতিটি ট্রেন রুট উপস্থাপন করতে একটি ডাবলি লিংকড লিস্ট ব্যবহার করা হবে। ট্রেনের রুটের প্রতিটি স্টেশন লিংকড লিস্টের একটি নোড দিয়ে উপস্থাপন করা হবে।
স্টেশনগুলোতে আগমন ও প্রস্থানের সময় নিয়ে আপনার চিন্তা করতে হবে না। প্রতিটি স্টেশন শুধু একটি সংখ্যা দিয়ে উপস্থাপন করা হবে।
রুটগুলো সম্প্রসারিত করা যায়, রুটের শুরুতে বা শেষে স্টেশন যোগ করে। রুটের শুরু বা শেষ থেকে স্টেশন সরিয়ে এগুলো ছোটও করা যায়।
কখনো কখনো কোনো স্টেশন বন্ধ হয়ে যায়, আর সেক্ষেত্রে স্টেশনটি রুট থেকে সরিয়ে ফেলতে হয়, এমনকি সেটি রুটের শুরুতে বা শেষে না থাকলেও।
একটি রুটের আকার মাপা হয় ট্রেনটি কত দূর চলে তা দিয়ে নয়, বরং এটি কতগুলো স্টেশনে থামে তা দিয়ে।
লিংকড লিস্ট হলো কম্পিউটার সায়েন্সের একটি মৌলিক ডেটা স্ট্রাকচার, যা প্রায়ই অন্য ডেটা স্ট্রাকচার তৈরি করতে ব্যবহৃত হয়। নাম থেকেই বোঝা যায়, এটি এমন একটি লিস্ট যার নোডগুলো পরস্পর সংযুক্ত। এটি "নোড"-এর একটি লিস্ট, যেখানে প্রতিটি নোড তার প্রতিবেশী বা প্রতিবেশীদের সাথে সংযুক্ত থাকে। একটি সিঙ্গলি লিংকড লিস্ট-এ প্রতিটি নোড কেবল তার পরে আসা নোডের সাথে সংযুক্ত থাকে। একটি ডাবলি লিংকড লিস্ট-এ প্রতিটি নোড তার আগে আসা নোড এবং পরে আসা নোড, উভয়ের সাথেই সংযুক্ত থাকে।
লিংকড লিস্ট সম্পর্কে আরও গভীরে যেতে চাইলে, সুন্দর কিছু ছবি দিয়ে এটি ব্যাখ্যা করা এই নিবন্ধটি দেখুন।
আপনি একটি ডাবলি লিংকড লিস্টের ইমপ্লিমেন্টেশন লিখবেন।
একটি Node ইমপ্লিমেন্ট করুন যা একটি মান এবং পরবর্তী ও পূর্ববর্তী নোডের পয়েন্টার ধরে রাখে।
এরপর একটি List ইমপ্লিমেন্ট করুন যা প্রথম ও শেষ নোডের রেফারেন্স ধরে রাখে এবং আইটেম যোগ ও রিমুভ করার ফাংশন দেয়।
আপনার Node-এ নিম্নলিখিত ফিল্ড ও মেথড থাকা উচিত:
Value: নোডের মান (আমরা any ব্যবহার করব)।Next() *Node: পরবর্তী নোডের পয়েন্টার।Prev() *Node: পূর্ববর্তী নোডের পয়েন্টার।আপনার একটি NewList() ফাংশন থাকা উচিত যা একটি List তৈরি করে এবং রিটার্ন করে:
NewList(args ...any) *List: মানগুলোর ক্রম সংরক্ষণ করে একটি নতুন লিংকড লিস্ট তৈরি করে।আপনার List-এ নিম্নলিখিত মেথড থাকা উচিত:
First() *Node: প্রথম নোডের (হেড) পয়েন্টার রিটার্ন করে।Last() *Node: শেষ নোডের (টেইল) পয়েন্টার রিটার্ন করে।Push(v any): লিস্টের পেছনে মান ইনসার্ট করে।Pop() (any, error): লিস্টের পেছন থেকে মান রিমুভ করে।Unshift(v any): লিস্টের সামনে মান ইনসার্ট করে।Shift() (any, error): লিস্টের সামনে থেকে মান রিমুভ করে।Reverse(): লিংকড লিস্টটি রিভার্স করে।Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।