2017-06-30 11 views
0

リストのノードを削除するコードを書いていますが、私が把握できない問題が発生しています。リンクリスト内のノードを削除することに関して

この私のdelete_node機能:

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; 

} 

これはmain機能です:

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(); 

これはエラーです:

Exception in thread "main" java.lang.NullPointerException 

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

あなたは 'ptr.link'を' null'に設定してから、エラーの原因となる行90のデータにアクセスしようとします。私はあなたがこのコードで達成しようとしているものは何も考えていません –

答えて

0

問題は、あなたが最後に到達していることです削除するnodeが見つかりません。基本的にリストにないnodeを削除しようとしています。 ptr.linkが有効であるかどうかをチェックせずにptr.link.dataにもアクセスします。次のようにこれらの両方を改善することができる。

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; 

} 

これだけ、例えば、最初はnullであるptrをチェックリストは空です。また、ptr.linkがヌルであることを確認します。


ただ、ノート、Javaでのクラスは、例えば、typically uppercaseありますListおよびNode

+0

問題は2番目のノードを削除している間は完全に問題ありませんが、1番目のノードを削除しようとするとエラーになります。 THANK U –

+0

@DeviPrasadはい、別の問題がありました。編集しました。今すぐ動作するはずです。 – River

+0

ありがとう。 –

関連する問題