2017-06-30 6 views
0

Ich schreibe Code, um einen Knoten einer Liste zu löschen, und ich bekomme ein Problem, das ich nicht herausfinden kann.Zum Löschen eines Knotens in der verknüpften Liste

Diese meine delete_node Funktion:

public void delete_node(int data){ 
    node ptr=head; 
    //if 1st node is to be Deleted 
    if(ptr != null && ptr.data==data){ 
     head=ptr.link; 
     ptr.link=null; 
    } 

    //line 90 below: 
    while(ptr.link.data!=data){ 
     ptr=ptr.link; 
    } 

    ptr.link=ptr.link.link; 

} 

Dies ist die main Funktion:

public static void main(String[] args) { 
    list o=new list(); 
    o.insert_beginning(1); 
    o.insert_beginning(2); 

    o.delete_node(2);//line 8 

    o.display(); 

Dies ist der Fehler:

Exception in thread "main" java.lang.NullPointerException 

    at list.delete_node(list.java:90) 
    at Main.main(Main.java:8) 
+0

setzen Sie Ihren 'ptr.link' auf' null' und versuchen Sie dann in Zeile 90 auf dessen Daten zuzugreifen, was Ihren Fehler verursacht. Ich habe keine Ahnung, was Sie in diesem Code –

Antwort

0

Das Problem ist, dass Sie das Ende erreichen Ihrer Liste, ohne die node zu finden, die Sie löschen möchten. Grundsätzlich versuchen, eine node nicht in der Liste zu löschen. Sie können auch auf ptr.link.data zugreifen, ohne zu prüfen, ob ptr.link überhaupt gültig ist. Beide können behoben werden, wie folgt:

public void delete_node(int data){ 
    node ptr=head; 
    if(ptr == null) 
     return; 
    //if 1st node is to be Deleted 
    if(ptr != null && ptr.data==data){ 
     head=ptr.link; 
     ptr.link=null; 
    } 

    while(ptr.link != null && ptr.link.data!=data){ 
     ptr=ptr.link; 
    } 
    if(ptr.link != null) 
     ptr.link=ptr.link.link; 

} 

Diese prüft nur für ptr null zunächst sein, z.B. Die Liste ist leer. Es hat auch überprüft, ob ptr.link null ist.


Nur eine Notiz, Klassen in Java sind typically uppercase, z.B. List und Node.

+0

erreichen wollen, das Problem ist, während Löschen des 2. Knotens ist es völlig in Ordnung, aber während ich versuche, das erste zu löschen, löst es Fehler aus. DANK U –

+0

@DeviPrasad Ja, du hattest ein anderes Problem. Bearbeitet, sollte jetzt funktionieren. – River

+0

Vielen Dank. –

Verwandte Themen