यहाँ मेरा रन करने योग्य कोड है।
मैंने जो भी किया है वह तीन अस्थायी नोड्स (स्पेस जटिलता 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?
:)