列表使用节点

时间:2011-09-29 00:03:00

标签: java list nodes

我们正在学习使用节点的链表,我不确定我是否正确这样做。我们假设只是创建一个简单的列表但是当我去运行程序时,我得到指向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);
    } 

       }

2 个答案:

答案 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);
    }
}