2016-08-13 5 views
0

Я написал этот код для вставки узла в конце linkedlist, но я получаю только 1-ый элемент, когда я печать списка:ошибки вставки узла в конце связанного списка в 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

Давайте подробнее рассмотрим деталь, когда head не является null.

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

Когда этот цикл завершается ptr будет null. Вероятно, вы не хотите, чтобы это было (я полагаю, вы хотите, чтобы это был последний элемент в списке). Вероятно, вы хотите изменить его на:

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

Обратите внимание, что это не вызовет NPE, потому что мы знаем, что голова не равна нулю. На следующую часть.

node.next = null; 
ptr = node; 

Теперь node.next нормально (также нет необходимости, поскольку вы инициализирован его нуль в конструкторе), но то, что следующая инструкция должны делать? Он изменяет только локальную переменную. Вы, вероятно, имели в виду:

ptr.next = node; 
+0

спасибо! Я не заметил ошибку цикла. – user2916886

+0

Добро пожаловать. Если у вас нет других проблем, вы можете подумать о принятии этого ответа (для этого есть элемент под кнопкой downvote) – mszymborski

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