我们正在学习使用节点的链表,我不确定我是否正确这样做。我们假设只是创建一个简单的列表但是当我去运行程序时,我得到指向showList()方法的nullpointerException但是当我尝试不使用该方法时,则根本没有打印出来。非常感谢任何帮助。
public class node {
public int dataitems;
public node next;
node front;
public void initList(){
front = null;
}
public node makeNode(int number){
node newNode;
newNode = new node();
newNode.dataitems = number;
newNode.next = null;
return newNode;
}
public boolean isListEmpty(node front){
boolean balance;
if (front == null){
balance = true;
}
else {
balance = false;
}
return balance;
}
public node findTail(node front) {
node current;
current = front;
while(current.next != null){
//System.out.print(current.dataitems);
current = current.next;
} //System.out.println(current.dataitems);
return current;
}
public void addNode(node front ,int number){
node tail;
if(isListEmpty(front)){
front = makeNode(number);
}
else {
tail = findTail(front);
tail.next = makeNode(number);
}
}
public void printNodes(int len){
int j;
for (j = 0; j < len; j++){
addNode(front, j);
} showList(front);
}
public void showList(node front){
node current;
current = front;
while ( current.next != null){
System.out.print(current.dataitems);
current = current.next;
}
System.out.println(current.dataitems);
}
public static void main(String[] args) {
node x = new node();
x.printNodes(50);
}
}
答案 0 :(得分:1)
你这样做
node current;
current = front;
但您永远不会初始front
,因此当您致电current.next
时,current
为空。所以你不能得到下一个......
顺便说一句,为什么不清理代码并执行
node current = front;
此外,Java中的类名应该大写,因此node
应为Node
。
答案 1 :(得分:1)
问题与addNode方法的变量范围有关。
public void addNode(node front ,int number){
node tail;
if(isListEmpty(front)){
front = makeNode(number); //reassigns the node front parameter
}
else {
tail = findTail(front);
tail.next = makeNode(number);
}
}
您对“front”的分配仅将makeNode(number)值分配给 local 变量。您需要使用this.front将makeNode(number)分配给节点类的实例变量或重构您的变量名。
public void addNode(node front ,int number){
node tail;
if(isListEmpty(front)){
//assigns a value to the member variable "front" of your node instance
this.front = makeNode(number);
}
else {
tail = findTail(front);
tail.next = makeNode(number);
}
}