运行时空指针异常

时间:2013-04-07 18:18:37

标签: exception runtime

这是我在这里的第一篇文章。我正在尝试创建一个单独的链接列表。我使用AtEndAtStart方法在列表的结尾或开头插入值,并使用display方法打印所有值。插入方法似乎工作正常(至少我认为如此)但每当我调用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();
}

1 个答案:

答案 0 :(得分:0)

我没有得到你的AtStart功能,它应该更简单:

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