java添加到链表的末尾
我在这个家庭作业问题上遇到了麻烦,它编译正确,但我遇到了一个我无法理解的异常。以下是我的主要方法
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)
所以它的指针变为空似乎有问题。抱歉,如果这是显而易见的,我只做了几个月的编程,链表不是我的强项
如有必要,以下是完整的代码:
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;
}
}
}
非常感谢你的帮助^_^
# 1 楼答案
你的
addLast
方法坏了;它将继续执行逻辑,即使我们已经确定我们启动的节点是null
您想要做的是有一个完整的
if-else
案例,其中else
分支覆盖列表的遍历:现在有了你想要的行为;如果列表中没有节点,并且我们正在添加到最后一个元素,那么我们将添加元素,就像添加到最后一个元素一样。如果head元素不为null,我们将遍历列表,并将其插入末尾