用Java打印链表

用Java打印链表,java,Java,我正在做一个作业,我需要创建一个给定模板的链表。然而,到目前为止,我一直被困在如何打印链接列表的问题上。有人能找出我做错了什么吗 编辑: 抱歉,我应该指出,在编译时,NumberList的第27行出现了java.lang.NullPointerException错误 编译时出错 NumberList.java import java.util.*; public class NumberList { private Node head; public NumberList() {

我正在做一个作业,我需要创建一个给定模板的链表。然而,到目前为止,我一直被困在如何打印链接列表的问题上。有人能找出我做错了什么吗

编辑: 抱歉,我应该指出,在编译时,NumberList的第27行出现了java.lang.NullPointerException错误

编译时出错

NumberList.java

import java.util.*;

public class NumberList {

  private Node head;

  public NumberList() {
  }
  public void insertAtHead(int x) {
      Node newNode = new Node(x);

      if (head == null)
          head = newNode;
      else {
          newNode.setNext(head);
          head = newNode;
      }
  }
  public void insertAtTail(int x) {
  }
  public void insertInOrder(int x) {
  }
  public String toString() {
      Node tmp = head;

      String result = "";
      while (tmp.getNext() != null) {
          result += tmp.toString() + " ";
      }

      return result;
  }
  //---------------------

  // test methods

  //---------------------

  public static void testInsertAtHead() {

        Random r = new Random();
        int n = 20;
        int range = 1000;

        NumberList list = new NumberList();

        for (int i=1; i<=n; i++) {
              int x = r.nextInt(range);
              list.insertAtHead(x);
              System.out.println("" + x + ": " + list);
        }
  }

  public static void testInsertAtTail() {

        Random r = new Random();
        int n = 20;
        int range = 1000;

        NumberList list = new NumberList();

        for (int i=1; i<=n; i++) {
              int x = r.nextInt(range);
              list.insertAtTail(x);
              System.out.println("" + x + ": " + list);
        }
  }

  public static void testInsertInOrder() {

      Random r = new Random();
        int n = 20;
        int range = 1000;

        NumberList list = new NumberList();

        for (int i=1; i<=n; i++) {
              int x = r.nextInt(range);
              list.insertInOrder(x);
              System.out.println("" + x + ": " + list);
        }
  }

  public static void main(String[] args) {
        //testInsertAtHead();
        //testInsertAtTail();
        testInsertInOrder();
  }
}
class Node {

  private int number;
  private Node next;

  public Node(int n) {
     this.number = n;
     this.next = null;
  }
  public Node getNext() {
      return next;
  }
  public int getNumber() {
      return number;
  }
  public void setNext(Node n) {
      if (n == null)
          return;

      n.setNext(next);
      next = n;
  }
  public String toString() {
      return number + "";
  }

}
你的问题是:

while (tmp.getNext() != null) {
    result += tmp.toString() + " ";
}
您根本没有进入列表中的下一个链接。你应该考虑执行< BR>
tmp=tmp.getNext()
。但在执行此操作之前,请确保您的
状态为
while(tmp!=null)
以避免出现
NullPointerException

您在第27行遇到的
NullPointerException
可能是因为
head
没有初始化,因为您在
insertthead
之前调用了
insertinoder
,这是程序中初始化
head
的唯一地方。

您的问题是:

while (tmp.getNext() != null) {
    result += tmp.toString() + " ";
}
您根本没有进入列表中的下一个链接。你应该考虑执行< BR>
tmp=tmp.getNext()
。但在执行此操作之前,请确保您的
状态为
while(tmp!=null)
以避免出现
NullPointerException


第27行出现的
NullPointerException
可能是因为
head
没有初始化,因为在
insertthead
之前调用了
insertionder
,这是程序中初始化头的唯一位置。

您正在调用insertAtTail和insertInOrder方法,但它们是空的。以及您的NumberList构造函数。

您正在调用insertAtTail和InsertInoder方法,但它们是空的。还有你的NumberList构造函数。

你没有告诉我们问题是什么……你没有告诉我们问题是什么……我把它改为:
while(tmp!=null){tmp=tmp.getNext();result+=tmp.toString()+”;}
但是它打印出了空格号,
tmp=tmp.getNext()
位于
result+=tmp.toString()+”之后啊,没错。由于某些原因,仍然会出现空白。@Jasonkhali我真诚地希望您现在已经使用了调试器并发现了问题。我给你的答案是完整的,涵盖了你的代码中可能存在的错误。更进一步说,这只是纯粹的调试,应该不超过5-10分钟……我将它改为:
while(tmp!=null){tmp=tmp.getNext();result+=tmp.toString()+“”;}
但是它打印出了whitespaceNo,
tmp=tmp.getNext()
位于
result+=tmp.toString()+”之后啊,没错。由于某些原因,仍然会出现空白。@Jasonkhali我真诚地希望您现在已经使用了调试器并发现了问题。我给你的答案是完整的,涵盖了你的代码中可能存在的错误。进一步说,这只是纯粹的调试,应该不超过5-10分钟。。。