2016-04-12 21 views
0

Belirtilen dizinde, bağlantılı bir listeden bir Düğümü kaldıran sıfırdan bir yöntem çıkardım.LinkedList dizini kaldır java

Doğru Düğüm'ü kaldırmıyor. Tutulmada hata ayıklayıcı ile adım atmaya çalıştım ama sorunu yakalayamadım.

Her Düğüm bir belirteci içerir. Token sınıfı, Düğüm sınıfı dahil ettim. Yöntemlerimi liste sınıfına yazdım ve bir Test sınıfı dahil ettim.

Kaldırma yöntemi şu anda belirtilen dizinin yanındaki düğümü kaldırıyor. Bunu nasıl çalıştırabilirim? Uzun mesaj için özür dilerim.

public class thelist{ 

    public Node head; 

    public List() { 
     head = null; 
    } 

    public Node remove(int index) { 
     Node node= head; 
     for (int i = 0; i < index; i++) { 
      node= node.next; 
     } 
     node.next = node.next.next; 
     return node; 
    } 
+1

'ref.next = ref.next.next;' Olması gereken 'ref.previous.next = ref.next; '? –

cevap

3

sorun Doğru dizine aldıktan sonra, sen SONRAKİ düğümü, dizinde değil bir kaldırıyoruz olmasıdır. Doğru düğümü bulduktan sonra ref.previous.next değerini ref.next; Böylece, ref'un kesilmesi.

public Token remove(int index) { 
    if (index<0 || index >=size()) { 
     throw new IndexOutOfBoundsException(); 
    } 
    Node ref = head; 
    for (int i = 0; i < index; i++) { 
     ref = ref.next; 
    } 
    if (index == 0) { 
     head = ref.next; 
    } else { 
     ref.previous.next = ref.next; 
    } 
    size--; 
    return ref.getObject(); 
} 
+1

'index'' 0' olduğunda bir hata mesajı alırsınız. "Head.previous" öğesinin "null" olduğu varsayılıyor. –

+0

Son dizgiyi kaldırmayı denediğinizde, 'ref.next' öğesinin null olduğu ya da 'ref.previous' öğesinin de ilk dizininin null olduğu durumlarda bu bir NPE alır, bu nedenle bunları denetlemeniz ve bu örnekleri buna göre işlemeniz gerekir. – NAMS

+0

Evet, '0 'indeksi' düzeltilmiş bir 'NullPointerException' atardı. Bununla birlikte, eğer bu son indeyse, bir açıklama yapmaz çünkü “ref.next” sadece null'a başvurur, null özelliğine erişmeyi denemez. – EmptyArsenal