হতে পারে আমি এটিকে আরও সরল করে দিচ্ছি, তবে কেবল ছোট্ট তালিকাটি পুনরাবৃত্তি করব এবং Link
মার্জিং পয়েন্ট হিসাবে শেষ নোডগুলি ব্যবহার করব ?
সুতরাং, একত্রীকরণ বিন্দুটি কোথায় Data->Link->Link == NULL
, Data->Link
মার্জিং পয়েন্ট হিসাবে দেওয়া হচ্ছে (তালিকার শেষে)।
সম্পাদনা:
ঠিক আছে, আপনি যে ছবি পোস্ট করেছেন সেখান থেকে আপনি দুটি তালিকাকে ছোট, প্রথমটি বিশ্লেষণ করুন। ক্ষুদ্রতম তালিকার সাহায্যে আপনি নীচের নোডের রেফারেন্সগুলি বজায় রাখতে পারেন। এখন, আপনি দ্বিতীয় তালিকাকে পার্স করার সময় আপনি রেফারেন্সের সাথে তুলনা করুন যেখানে লিঙ্কলিস্টে [i] রেফারেন্সটি [i] -> লিংক। এটি মার্জ পয়েন্ট দেবে। ছবি দিয়ে ব্যাখ্যা করার সময় (ছবিটির ওপিতে মানগুলি সুপারপোজ করুন)।
আপনার একটি লিঙ্কযুক্ত তালিকা রয়েছে (নীচে দেখানো রেফারেন্স):
A->B->C->D->E
আপনার একটি দ্বিতীয় লিঙ্কযুক্ত তালিকা রয়েছে:
1->2->
একত্রিত তালিকার সাথে, উল্লেখগুলি পরে নিম্নলিখিত হিসাবে যাবে:
1->2->D->E->
অতএব, আপনি প্রথম "ছোট" তালিকাটি মানচিত্র করুন (একত্রীকরণের তালিকা হিসাবে, যা আমরা গণনা করছি তার দৈর্ঘ্য 4 এবং মূল তালিকা 5)
প্রথম তালিকার মধ্য দিয়ে লুপ করুন, রেফারেন্সের একটি রেফারেন্স বজায় রাখুন।
তালিকায় নিম্নলিখিত রেফারেন্স থাকবে Pointers { 1, 2, D, E }
।
আমরা এখন দ্বিতীয় তালিকার মধ্য দিয়ে যাচ্ছি:
-> A - Contains reference in Pointers? No, move on
-> B - Contains reference in Pointers? No, move on
-> C - Contains reference in Pointers? No, move on
-> D - Contains reference in Pointers? Yes, merge point found, break.
অবশ্যই, আপনি পয়েন্টারগুলির একটি নতুন তালিকা বজায় রাখছেন, তবে নির্দিষ্টকরণের বাইরে নয়। তবে প্রথম তালিকাটি ঠিক একবার পার্স করা হবে এবং দ্বিতীয় তালিকাটি কেবলমাত্র বিশ্লেষণ করবে যদি কোনও মার্জ পয়েন্ট না থাকে। অন্যথায়, এটি শীঘ্রই শেষ হয়ে যাবে (মার্জ পয়েন্টে)।