我在完成这个家庭作业问题时遇到了麻烦,它编译正确,但我得到了一个我无法弄清楚的异常。这是我的主要方法中的内容
MyLinkedListH1 list = new MyLinkedListH1();
list.addLast(5);
list.addLast(6);
list.addLast(7);
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
list.traverse();
list.print();
addLast方法(在我执行单个addLast之前执行addFirst的主方法中有效,但我不知道这会产生什么影响)。
public void addLast(int d)
{
Node newNode = new Node();
newNode.x = d;
newNode.link = null;
Node p = first;
if(first == null)
{
first = newNode;
}
while (p.link != null)
{
p = p.link;
}
p.link = newNode;
}
例外:
Exception in thread "main" java.lang.NullPointerException
at MyLinkedListH1$Node.access$200(Hmwkal.java:23)
at MyLinkedListH1.addLast(Hmwkal.java:50)
at Hmwkal.main(Hmwkal.java:7)
所以它似乎有一个指针变为null的问题。对不起,如果它显而易见,我只编程了几个月,链接列表不是我的强项。
如有必要,请填写完整的代码:
class Hmwkal
{
public static void main(String[] args)
{
MyLinkedListH1 list = new MyLinkedListH1();
list.addLast(5);
list.addLast(6);
list.addLast(7);
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
list.traverse();
list.print();
}
}
class MyLinkedListH1
{
private class Node
{
private Node link;
private int x;
}
private Node first = null;
public void addFirst(int d)
{
Node newNode = new Node();
newNode.x = d;
newNode.link = first;
first = newNode;
}
public void addLast(int d)
{
Node newNode = new Node();
newNode.x = d;
newNode.link = null;
Node p = first;
if(first == null)
{
first = newNode;
}
while (p.link != null)
{
p = p.link;
}
p.link = newNode;
}
public void print()
{
Node listNode = first;
while (listNode != null)
{
System.out.println(listNode.x);
listNode = listNode.link;
}
}
public void traverse() //This AND the print might be redundant
{
Node p = first;
while (p != null)
{
System.out.println(p.x);
p = p.link;
}
}
}
非常感谢任何帮助^ _ ^
答案 0 :(得分:1)
您的addLast
方法已被破坏;即使我们确定我们开始的节点是null
,它仍将继续执行逻辑。
您要做的是拥有一个完整的if-else
案例,其中else
分支涵盖了遍历列表:
public void addLast(int d) {
Node newNode = new Node();
newNode.x = d;
newNode.link = null;
if(first == null) {
first = newNode;
} else {
Node p = first;
while(p.link != null) {
p = p.link;
}
p.link = newNode;
}
}
这现在有人想要的行为;如果列表中没有节点,并且我们要添加到最后一个元素,我们将添加我们的元素,就像它是最后添加的元素一样。如果head元素不为null,我们将遍历列表,并且将其插入最后。