İşte benim çalıştırılabilir kodum.
Ne yaptım bağlantıları takip üç geçici düğüm (boşluk karmaşıklığı O(1)
) kullanarak bağlı liste geri almaktır .
Bunu yapmakla ilgili ilginç gerçek, bağlantılı listedeki döngüyü algılamaya yardımcı olmaktır, çünkü ilerledikçe, başlangıç noktasına (kök düğüm) geri dönmeyi beklemezsiniz ve geçici düğümlerden biri, siz sürece sürece null değerine gitmelidir. Kök düğümü işaret ettiği bir döngü var.
Bu algoritmanın zaman karmaşıklığı O(n)
ve uzay karmaşıklığıdır O(1)
.
Bağlantılı listenin sınıf düğümü:
public class LinkedNode{
public LinkedNode next;
}
Son düğümün ikinci düğüme işaret ettiği üç düğümden oluşan basit bir test senaryosuna sahip ana kod:
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;
}
Son düğümün ikinci düğüme işaret ettiği üç düğümden oluşan basit bir test örneği:
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?