2013-04-07 103 views
0

這是我第一篇文章。我正在嘗試創建一個單獨的鏈接列表。我使用AtEndAtStart方法在列表的末尾或開頭插入值,並使用display方法打印所有值。插入方法似乎工作正常(至少我認爲是這樣),但每當我調用顯示方法它只顯示第一個值,然後有一個空指針異常。例如,當我運行這個代碼時,我只看到9,然後是NPE,儘管我已經對「not null」的顯示方法進行了檢查。空指針在運行時異常

class node { 
    private int data; 
    private node next; 

    node() { 

    } 

    node(int data) { 
     this.data = data; 
     this.next = null; 
    } 
    public int getData() { 
     return data; 
    } 

    public void setData(int data) { 
     this.data=data; 
    } 

    public node getNext() { 
     return next; 
    } 

    public void setNext(node next) { 
     this.next = next; 
    } 
} 

public class list extends node { 
    node head; 
    list() { 

    } 

    public void AtStart(int val) { 
     node n = new node(val); 
     if (head == null) { 
      head=n; 
     } else { 
      n.setNext(head); 
      int temp = head.getData(); 
      head.setData(val); 
      n.setData(temp); 
      //n = head; 
     } 
    } 

    public void AtEnd(int val) { 
     if (head == null) { 
      node n = new node(val); 
      head = n; 
    } else { 
      node t = head; 
      for(; t.getNext() != null;) { 
       if(t.getNext() == null) { 
        t.setNext(new node (val)); 
       } 
       t = t.getNext(); 
      } 
     } 
    } 

    public void display() { 
     node t = head; 
     for(; t.getNext() == null;) { 
      if (t !=null) { 
       System.out.println(t.getData()); 
       t = t.getNext(); 
      } 
     } 
    } 
} 


public static void main(String args[]) { 
    list l = new list(); 
    l.AtStart(16); 
    l.AtEnd(6); 
    l.AtEnd(36); 
    l.AtStart(9); 
    l.AtEnd(22); 
    l.display(); 
} 
+2

我假設這就是Java。請用語言標記它,所以我們知道你在說什麼。另外,不要爲可憐的縮進道歉,你應該修正它! – 2013-04-07 18:20:22

+0

此外,有數百個,如果不是成千上萬個關於'NullPointerException'的問題,因爲它們都歸結爲相同的解決方案:**調試代碼**。這是你只需*學習的一部分發展。另請參見[**什麼是空指針異常?**](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception) – 2013-04-07 18:23:00

+1

請花時間格式化您的代碼,而不是以藉口張貼蹩腳文本。 – oleksii 2013-04-07 18:27:57

回答

0

我不明白你的AtStart函數做什麼,它應該是簡單得多:

public void AtStart(int val){ 
if(head==null){ 
head=n; 
} 
else{ 
head.setnext(head); 
head.setData(val); 
} 
}