এখানে আমার চলমান কোড।
আমি যা করেছি তা হ'ল O(1)
লিঙ্কগুলি ট্র্যাক করে রাখার জন্য তিনটি অস্থায়ী নোড (স্পেস জটিলতা ) ব্যবহার করে লিঙ্কযুক্ত তালিকাটি শ্রদ্ধা করা ।
এটি করার বিষয়ে আকর্ষণীয় সত্যটি লিঙ্কযুক্ত তালিকার চক্রটি সনাক্তকরণে সহায়তা করা কারণ আপনি এগিয়ে যাওয়ার সাথে সাথে আপনি প্রারম্ভিক বিন্দুতে (রুট নোড) ফিরে যাওয়ার আশা করবেন না এবং অস্থায়ী নোডের কোনওটি বাতিল হওয়া উচিত যদি না আপনি একটি চক্র রয়েছে যার অর্থ এটি মূল নোডকে নির্দেশ করে।
এই অ্যালগরিদমের সময় জটিলতা O(n)
এবং স্থান জটিলতা O(1)
।
লিঙ্কযুক্ত তালিকার জন্য এখানে ক্লাস নোড:
public class LinkedNode{
public LinkedNode next;
}
এখানে তিনটি নোডের সাধারণ পরীক্ষার কেস সহ প্রধান কোড যা শেষ নোডটি দ্বিতীয় নোডের দিকে নির্দেশ করছে:
public static boolean checkLoopInLinkedList(LinkedNode root){
if (root == null || root.next == null) return false;
LinkedNode current1 = root, current2 = root.next, current3 = root.next.next;
root.next = null;
current2.next = current1;
while(current3 != null){
if(current3 == root) return true;
current1 = current2;
current2 = current3;
current3 = current3.next;
current2.next = current1;
}
return false;
}
এখানে তিনটি নোডের একটি সহজ পরীক্ষার কেস যা শেষ নোডটি দ্বিতীয় নোডের দিকে নির্দেশ করছে:
public class questions{
public static void main(String [] args){
LinkedNode n1 = new LinkedNode();
LinkedNode n2 = new LinkedNode();
LinkedNode n3 = new LinkedNode();
n1.next = n2;
n2.next = n3;
n3.next = n2;
System.out.print(checkLoopInLinkedList(n1));
}
}
finite amount of space and a reasonable amount of time?
:)