AddLast方法在列表类中不起作用

时间:2017-10-24 08:33:11

标签: java list

所以我试图创建一个简单的列表类来实现addFIrst和addLast算法,使其更加具体,如下所示:

public class Node {

    private int item;
    private Node link;

    public Node(int item, Node link)
    {
        this.item=item;
        this.link=link;
    }

    public int getItem()
    {
        return item;
    }

    public Node getLInk()
    {
        return link;
    }

    public void setItem(int item)
    {
        this.item=item;
    }

    public void setLink(Node link)
    {
        this.link=link;
    }
}

public class LIsta {

    private Node head;

    public LIsta()
    {
        head=null;
    }

    public void insertFirst(int item)
    {
        Node n=new Node(item, head);
        head=n;
    }

    public void insertLast(int item)
    {
        Node temp=head;
        while(temp!=null) temp=temp.getLInk();
        Node n=new Node(item, null);
        temp.setLink(n);
    }

    public void Print()
    {
        Node temp=head;
        while(temp!=null)
        {
            System.out.println(temp.getItem());
            temp=temp.getLInk();
        }
    }

}

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        LIsta list=new LIsta();
        list.insertFirst(5);
        list.insertFirst(3);
        list.insertFirst(2);
        list.insertLast(8);
        list.Print();
    }

}

然而,每当我尝试在行中更具体地调用insertLast()方法时,它会给我一个错误: temp.setLink(n);

它说:空指针访问。此时变量temp只能为null。 任何想法?

1 个答案:

答案 0 :(得分:1)

您遍历链接,直到temp变为null,此时您无法对temp变量执行任何操作。您需要找到最后一个链接(即NodegetLInk()的最后一个非空null

public void insertLast(int item)
{
    if (head == null) {
        head = new Node(item, null);
    } else {
        Node temp=head;
        while(temp.getLInk() != null) temp=temp.getLInk();
        Node n=new Node(item, null);
        temp.setLink(n);
    }
}