【问题标题】:Sorted Linked List gives NullPointerException排序的链表给出 NullPointerException
【发布时间】:2018-03-23 23:45:47
【问题描述】:

我正在创建一个排序链接列表,其中整数按升序存储。我在使用 add() 方法时遇到问题。当我添加第一个节点时它可以工作,但是当我尝试添加另一个节点时它给了我NullPointerException

这是我的 Node 类代码:

public class Node {
  int value;
  Node next;

  public Node() {
  }

  public Node(int c) {
    this.value = c;
  }

  public boolean hasNext() {
    if (next == null) {
       return false;
    } else {
       return true;
  }


}

这是我的 SortedList 类的一部分:

  public class SortedList {

    Node head;
    public int listCount;


    public SortedList() {
      listCount = 0;
      this.head=null;
    }

    public void add(int num) {
      Node newNode = new Node(num);
      Node temp = head;

      if (head == null) {
        head = newNode;
        listCount++;
        System.out.println("Node with data "+num+" was added.");
       } else {
        while (temp.value <= num) {    //the compiler shows NullPointerException here in this line 
            temp = temp.next;
        }
          if (temp.next==null) {
            temp.next=newNode;
            listCount++;
            System.out.println("Node with data "+num+" was added.");
        } else {
            newNode.next=temp.next.next;
            temp.next=newNode;
            listCount++;
            System.out.println("Node with data "+num+" was added.");
        }


    }

}

它说 java.lang.NullPointerException 在“while (temp.value

【问题讨论】:

  • 所以想想如果你添加的数字大于列表中已经存在的每个数字会发生什么。在我看来,这个循环会一直持续到 temp 变为空,这不可能是你想要的,对吧?

标签: java linked-list singly-linked-list


【解决方案1】:

考虑你的程序的这些行:

while (temp.value <= num) { 
    temp = temp.next;
}

每次通过循环时,都会访问 temp 以检索其 value,如果该值小于或等于 num,则转到 next 节点。

但是,这段代码中没有任何内容可以处理当您点击排序列表的“末尾”时发生的事情(因此temp.nextnull)。发生这种情况时,null 被分配给temp,然后再次检查循环条件,temp.value 抛出 NullPointerException。

究竟如何解决这个问题在某种程度上是一个偏好问题。当temp 占据列表的尾部时,您可能想停下来。所以也许你可以将循环条件更改为

while (temp.value <= num && temp.next != null)

【讨论】:

  • 所以我确实更改了我的 while 循环,但现在我面临另一个问题。当我将节点添加到我的链表时,它只保存前两个节点和最后一个节点。所有其他主菜都不在链表中。
  • @Marina 你应该就此提出一个新问题
猜你喜欢
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多