2016-08-17 11 views
-1

最後のリンクリストにデータを追加しようとしています。ここに私のコードです。 これは私のリンクリストクラスです:リンクリストの最後にデータを追加する

public class LinkedList { 
     Node head; 

     private static class Node { 
      int data; 
      Node pointer; 

      public Node(int data) { 
       this.data=data; 
       pointer=null; 
      } 
     } 

この方法では、最後にデータを追加するためのものです。

public void append(int new_data){ 
     Node new_node=new Node (new_data); 

     if (head==null){ 
      head=new Node(new_data); 

     } 
     Node last_node=head; 
     new_node.pointer=null; 
     while (last_node.pointer !=null){ 
      last_node=last_node.pointer; 
      last_node.pointer=new_node; 

     } 
    } 

この方法でデータを印刷します。

public void printData(){ 
    Node print_Node; 
    print_Node=head; 
    while (print_Node !=null){ 
     System.out.print(print_Node.data+" "); 
     print_Node=print_Node.pointer; 
    } 

} 

public static void main(String[] args) { 
    LinkedList obj=new LinkedList(); 

    obj.append(10); 
    obj.append(100); 
    obj.printData(); 

    } 
} 

私のコードのどこに問題がありますか?

while (last_node.pointer !=null){ 
    last_node=last_node.pointer; 
    last_node.pointer=new_node; // this line ... bad! 

あなたはあなたのリストにすべてのノードを反復するためにlast_nodeを使用している:それは、あなたの問題はここにある10

+1

は、あなたがそれをデバッグしようとしたがありますか? – Reimeus

+0

実際に私のロジックに問題が見つかりませんでした:\ soデバッグを開始できませんでした:\ – Tasmin

+0

[ラバーダックのデバッグ](https://en.wikipedia)をコンパイルするコードのデバッグを開始することができます.org/wiki/Rubber_duck_debugging))。あなたのことが印刷されていると思っていることを考えれば、それはコンパイルする必要があります。したがって、デバッグすることができます。 –

答えて

0

を印刷します。 あなたが反復している間。新しく作成したノードを指すように、これらのノードのすべてのポインタを設定しています。しかし、あなたはあなたのリストの終わりに達したら、それを一度だけ行うべきです!

あなたの最初の入力を維持する理由はわかりません。しかし、よく、あなたのコードを追加することは間違いなく正しいです。

+0

この行はwhileループから外れるはずです。 – Tasmin

+0

正確に。私の答えを受け入れることは自由である;-) ...私が助けることができてうれしい。しかし、まだ:Javaスタイルのガイドをチェックし、 "命名"で自分自身を鍛えてください。 – GhostCat

0

TRY THIS OUT

パブリッククラスlinked_list {

Node head; 

private static class Node 

{ 
    int data; 
    Node pointer; 

    public Node(int data) 
    { 
     this.data = data; 
     pointer = null; 
    } 
} 

    public void append(int new_data) 
    { 
     Node new_node = new Node(new_data); 
     //new_node.pointer = null; No need to set pointer to null as it is already null in your constructor. 

     if (head == null) 
     { 
      head = new Node(new_data); 
     } 

     Node last_node = head; // Its okay To not change head , good practise. 
     while (last_node.pointer != null) 
     { 
      last_node = last_node.pointer; 
     } 
     // I think here was the error, your the linked list was not adding only one element , Because while loop 
     // got terminated just it reaches null i.e not executing the below line. 
     // So put it after while loop, wen you have reached the NULL. 
     last_node.pointer = new_node; // line ERROR 

    } 
    public void printData(){ 
     Node print_Node; 
     print_Node=head; 
     while (print_Node !=null){ 
      System.out.print(print_Node.data+" "); 
      print_Node = print_Node.pointer; 
     } 

    } 
    public static void main(String[] args) 
    { 
     linked_list obj=new linked_list(); 

     obj.append(10); 
     obj.append(100); 
     obj.append(898); 
     obj.append(8334); 
     obj.append(118334); 
     obj.append(833400); 
     obj.append(83340043); 

     obj.printData(); 

    } 

} 
+0

私はちょうどそれを考え出した。はい "last_node.pointer = new_node;" whileループから外れるはずです。 – Tasmin

+0

ヒント:それは実際には良い答えではありません。それ以上の説明なしにコードを削除するだけではスタイルが良くありません。 – GhostCat

+0

申し訳ありませんが、私はエラーを説明し、コメントで説明しました。 – Sanjeev

関連する問題