১০-৮ঃ Detect Cycle in Singly Linked List
Last updated
Last updated
এই মডিউলে আমরা একটি Singly Linked List এ কীভাবে Cycle Detect করতে হয় । প্রথমে জেনে নেয়া যাক Cycle বলতে কি বুঝানো হয়েছে। ধরুন আপনার এলাকায় তিনটি ঘর আছে যারা নিজেদের মধ্যে রাস্তা দিয়ে একজন আরেকজনের সাথে যুক্ত আছে নিচের ছবির মতো
এখন আমরা যদি A ঘর থেকে সোজা রাস্তা ধরে যাত্রা শুরু করি তবে B ঘরে যাবো , B ঘর থেকে যাবো C ঘরে , এবং C ঘর থেকে যাবো A ঘরে। অর্থাৎ যে ঘর (A) থেকে যাত্রা শুরু করেছিলাম আবার যাত্রা শেষ করে সেই ঘরেই ফিরে এসেছি। এইখানে রাস্তা গুলো এই ঘর গুলোর মধ্যে একটি সাইকেল বা লুপ তৈরি করেছে । এটিকে বলা হয় Cycle. এখন দেখে নেয়া যাক একটি Singly Linked List এ সাইকেল থাকলে তা দেখতে কেমন হবে ।
এখানে যদি আমরা Y Node হতে next , নেক্সট করে সামনে যেতে থাকি তবে যেহেতু আপাত দৃষ্টিতে Last Node হলো C . এবং C Node এর নেক্সট এ গেলে আমরা আবার Y Node এ ফিরে আসবো। অর্থাৎ এখানে একটি Cycle ক্রিয়েট হয়েছে. Singly Linked List এ Cycle Detect করার জন্য আমরা একটি নতুন টেকনিক শিখবো । যাকে বলা হয় Hare and Tortoise বা Slow and Fast টেকনিক। আগে দেখে নেয়া যাক এই টেকনিক কীভাবে Implement করতে হয়। ১। শুরুতে আমরা Two Pointers টেকনিক এর মতো দুটি পয়েন্টার নিবো যার নাম হবে Hare , Tortoise. যা Initially Singly Linked List এর প্রথম Node এ থাকবে। ২। এরপর Hare (fast) পয়েন্টার কে ২ ঘর করে করে সামনে নিতে থাকবো , এবং Tortoise (slow) পয়েন্টার কে একঘর একঘর সামনে নিতে থাকবো। ৩। দুটি পয়েন্টার যদি কোনো একটি মোমেন্ট এ একই জায়গায় মিলিত হয় তবে সেক্ষেত্রে আমরা বলতে পারবো , LInked List এ একটি Cycle রয়েছে। যদি মিলিত না হয় তবে সেই ক্ষেত্রে বলা যাবে , উক্ত Linked List এ কোনো Cycle নাই। আসেন কোড এর মাধ্যমে Implementation টা দেখি। Code :