将节点添加到链表的末尾,具有后指针和起始指针

Adding a node to then end of a linked list, having a rear and start pointer

我试图将一个节点添加到我的链表的末尾,当我到达 else 语句并尝试将 problem.rear.next 设置为我正在添加的新节点时,我得到一个空指针异常。出于某种原因,当我尝试将 rear.next 指针设置为新节点时,会弹出异常。

澄清一下,

BigIntegerList 是一个节点链表,它也是通过将各个整数链接在一起来表示大整数的链表。大整数列表定义了 "start" 和 "rear" 节点,BigInteger 节点为数据定义了 "x",为指向列表中下一个节点的指针定义了 "next"。

此外,

problem.n表示要读入的BigIntegers的个数,该方法从一个文本文件中读取,第一个读取的数字表示要读取多少个大整数,后面是实际的BigIntegers

任何想法都欢迎,因为我很困惑....

BigIntegerList problem;
   LinkedList x;
   BigIntegerNode curr;

   problem = new BigIntegerList();
   //get value of first line stating #of bigInts to read in
   problem.n = LinkedList.readInteger(in);
   //read big ints from text file based on first number passed, n
   for(int i=0; i<problem.n;i++)
   {
     x = new LinkedList();
     x.readBigInteger(in);
     //case that the list is empty
     if(problem.n<1)
     {
       problem.start = new BigIntegerNode(x,null);
       problem.rear = problem.start;
     //list is not empty, add nodes to rear
     }else
     {
       curr = new BigIntegerNode(x,null);
       problem.rear.next = curr; -----> this is where i get a nullpointer....
       problem.rear = curr;
     }
   }
   return problem;

正如@dave 建议的那样,将 if (problem.n < 1) 更改为

If (i < 1) {

problem.n是循环将进行的总迭代次数,即常数。 i 是循环的计数器。它会在第一次迭代中设置为0,然后设置为1, 2, 3, ..., (problem.n)-1

由于您希望 if 语句在第一次迭代中评估为 true,让它查看 i 而不是 problem.n