2016-08-17 3 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(); 

    } 
} 

В чем проблема в моем коде? Он печатает только 10.

+1

вы пробовали отладки это? – Reimeus

+0

На самом деле я не мог найти проблему в своей логике: \ so не удалось начать отладку: \ – Tasmin

+0

Вы можете начать отладку любого кода, который компилируется (или даже этого не происходит, см. [Отладка резиновой утки] (https: //en.wikipedia .org/вики/Rubber_duck_debugging)). Учитывая, что вы сказали, что ваш печатает, он должен скомпилировать; таким образом, вы можете отлаживать. –

ответ

0

Ваша проблема здесь:

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

Вы используете last_node итерировать все узлы в списке. И пока вы повторяетесь; вы устанавливаете указатели всех этих узлов ... для указания на вновь созданный узел. Но вы должны сделать это только один раз, когда вы достигнете конца своего списка!

Не знаете, почему это сохраняет вашу первую запись; но ну, ваш код для добавления определенно неверен.

+0

спасибо. эта строка должна быть вне цикла while. – Tasmin

+0

Точно. Не стесняйтесь принять мой ответ, тогда :-) ... рад, что я мог бы помочь. Но все же: ознакомьтесь с руководствами по стилю в стиле Java и обучите себя «именованию». – GhostCat

0

Попробовать это

общественного класса 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

Смежные вопросы