2015-03-30 4 views
0

Я пытаюсь вставить новый узел в конец одного связанного списка. Но после компиляции я получаю исключение NullPointerException."java.lang.NullPointerException" при попытке добавитьLast() в связанный список

Вот класс Node.

class Node { 
    private int data; 
    private Node next; 

    public Node(int x){ 
     data = x; 
     next = null; 
    } 
    public int getData(){ 
     return data; 
    } 
    public Node getNext(){ 
     return next; 
    } 
    public void setData(int newx){ 
     data = newx; 
    } 
    public void setNext(Node n){ 
     next = n; 
    } 
} 

Вот это единственный класс LL

public class SingleLL { 
    protected Node head=null; 
    protected Node tail=null; 
    protected int size=0; 

    public int getSize(){ 
     return size; 
    } 

    public void addLast(int x){ 
     Node newnode = new Node(x); 
     if(size==0){ 
      head = newnode; 
     } 
     else{ 
      tail.setNext(newnode); 
      tail = newnode; 
     } 
     size = size+1; 
    } 
    public void addfirst(int x){ 
     Node newnode = new Node(x); 
     if(size==0){ 
      tail = newnode; 
     } 
     else{ 
      newnode.setNext(head); 
      head = newnode; 
     } 
     size = size+1; 
    } 

Метод AddFirst() работает. Когда я пытаюсь создать LL с помощью addLast(), появляется NullPointerException. Я думаю, что должна быть какая-то проблема на if(size==0){head = newnode;}, но я не могу понять это.

public static void main(String arg[]){ 
     int[] a = {1,2,3,4,5,6}; 
     SingleLL myList = new SingleLL(); 
     for(int i=0;i<a.length;i++){ 
      myList.addLast(a[i]); 
     } 
    }   
} 

ответ

0

В обоих addLast и addFirst, вам необходимо инициализировать как head и tail, когда список пуст. В противном случае один или другой никогда не будет установлен, и приведет к вашему NullPointerException.

0
// In your two add methods: 
// addLast: because when size = 1, head equals tail 
    if(size==0){ 
     head = newnode; 
     tail = head; 
    } 
    // addFirst: because when size = 1, head equals tail 
    if(size==0){ 
     tail = newnode; 
     head = tail; 
    } 

Помните, что исключение NullPoint произойдет только до "." точно так же, как tail.setNext(); Посмотрим, если size = 1, вы вызываете addLast. В настоящее время head - это новый номер, который вы добавили, но хвост имеет значение null. Поэтому, когда он использует tail.setNext() (на самом деле, null.setNext()) вызывает NullPointException.

+0

Благодарим вас за подробное объяснение. Очень ценю это! – jessica

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