所以我试图创建一个简单的列表类来实现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。 任何想法?
答案 0 :(得分:1)
您遍历链接,直到temp
变为null
,此时您无法对temp
变量执行任何操作。您需要找到最后一个链接(即Node
为getLInk()
的最后一个非空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);
}
}