将节点添加到链表的末尾,具有后指针和起始指针
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
我试图将一个节点添加到我的链表的末尾,当我到达 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