2016-08-13 1 views
0

にリンクリストの末尾にノードを挿入するには、私はlinkedlistの終わりにノードを挿入するには、このコードを書いたが、私は、リストを印刷していたとき、私は唯一の第一の要素を取得しています:エラーは、java

public class LinkedList { 

    public class Link{ 

     private int data; 
     private Link next; 

     public Link(int data,Link next){ 
      this.data = data; 
      this.next = next; 
     } 

     public void printLink(){ 

      System.out.print(data); 
     } 

    } 

    private Link head; 

    public LinkedList(){ 
     head = null; 
    } 

    public void insertNode_end(int data1){ 

     Link node = new Link(data1,null); 

     if(head == null){ 

      node.next = head; 
      head = node; 
     } 

     else{ 
      Link ptr = head; 
      while(ptr != null){ 
       ptr = ptr.next; 
      } 

      node.next = null; 
      ptr = node; 

     } 
    } 

public void printList(){ 
     Link curr_node = head; 
     while(curr_node != null){ 
      curr_node.printLink(); 
      curr_node = curr_node.next; 
     } 
    } 

    public static void main(String args[]){ 

     LinkedList obj = new LinkedList(); 

     obj.insertNode_end(1); 
     obj.insertNode_end(2); 
     obj.insertNode_end(3); 
     obj.insertNode_end(4); 
     obj.insertNode_end(5); 

     obj.printList(); 
    } 

} 

私は1しか印刷されません。私もptr.next = nodeをしようとしましたが、それはnull pointer exceptionを投げます。

私はここで間違いをしていますか?

+1

コードのデバッグに役立つように、IDEのデバッガでコードをステップ実行することをお勧めします。 –

答えて

1

headnullではない部分を詳しく見てみましょう。

Link ptr = head; 
while(ptr != null){ 
    ptr = ptr.next; 
} 

このループはptrを終了

nullになります。おそらくあなたが望むものではないでしょう(私はそれをリストの最後の要素にしたいと思っています)。

headがnullではないことがわかっているため、NPEは発生しません。次の部分へ。

node.next = null; 
ptr = node; 

node.nextは(も不要なあなたは、コンストラクタでこれをnullに初期化するので)OKですが、どのような次の命令を行うことになっていますか?ローカル変数のみが変更されます。

ptr.next = node; 
+0

ありがとう!私はwhileループミスに気付かなかった。 – user2916886

+0

ようこそ。他の問題がない場合は、これを回答として受け入れることを検討できます(そのためのdownvoteボタンの下にあるのがあります) – mszymborski