2016-04-09 41 views
0

İki bağlantılı bağlantılı bir listeyi çaprazlamaya çalışıyorum ancak sonsuz bir döngü elde ettiğimi düşünüyorum. Amacım listede bir öğenin ilk en soldaki yerini bulmaktır. Öğeyi buluyorum ama programım döngüde kalıyor gibi görünüyor. Onu döngüden kesmenin tek yolu kırılıyor. Başka bir yolu olmalı. Teşekkürler. {Java'da Çift Bağlantılı Bağlantılı Bir Listeyi Geçiş?

Node<E> temp; 
    temp = head; 

    while(temp.next != null){ 

     if(temp.value==obj){ 
      System.out.println("YES"); 
     } 

     else{ 
      temp = temp.next; 
     } 

     System.out.println("\nNO"); 
    } 

}

+0

bir 'kırmaya koymak;' in eğer durumunuz. Değer bulunursa, döngüden çıkmaz ve asla bu başka ifadeye ulaşmaz. – piyush121

+0

@ piyush121 Bu çözümü biliyorum ama başka bir yolu olmalı. – Pasoon

+0

@ P.A. bir boole değişkeni kullanın veya döndürün. –

cevap

2

Herhangi bir durumda ilerlemek gerekiyor. Takas baskı "hayır" ve bir sonraki atama:

Node<E> temp = head; 
while(temp != null) { // Don't check for next here or miss the last element 
    if (temp.value == obj) { 
    System.out.println("YES: " + value); 
    break; 
    } 
    System.out.println("NO: " + value); 
    temp = temp.next; 

    // Loop check (if needed) 
    if (temp == head) { 
    break; 
    } 
} 

Kısa varyant hiçbir döngüler vardır ve bunlardan yalnızca biri "EVET" veya "HAYIR" isterseniz:

Node<E> temp; 
temp = head; 

while (temp != null && temp.value != obj) { 
    temp = temp.next; 
} 
System.out.println(temp == null ? "NO" : "YES"); 
+0

Ancak, parçanızı bulduysanız bile, döngüsünüz döngüde kalmaya devam ediyor. OP'nin kodundaki diğer hataları düzeltir, ama bu değil. –

+0

hala sonsuz döngü gibi görünüyor. – Pasoon

+0

Peki OP, tüm olaylara ya da ilkine ihtiyacı olup olmadığından bahsetmedi. –

İlgili konular