0

这是我在此的头一篇博文。我正在尝试创建一个单链接列表。我正在使用AtEndandAtStart方法在列表的末尾或开头插入值,并使用display方法打印所有值。插入方法似乎工作正常(至少我认为是这样),但每当我调用 display 方法时,它只显示第一个值,然后出现空指针异常。例如,当我运行此代码时,我只看到 9,然后有 NPE,尽管我已经检查了“非空”的显示方法。

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();
}
4

1 回答 1

0

我不明白你的 AtStart 函数做了什么,它应该更简单:

public void AtStart(int val){
if(head==null){
head=n;
}
else{
head.setnext(head);
head.setData(val);
}
}
于 2013-04-07T18:33:41.000 回答