"#的NullPointerException 34;在排序双重链接列表时

时间:2014-09-11 13:36:45

标签: java list nullpointerexception

我正在研究指针的概念。以下列表有假设的指针,一个指向前一个数字,另一个指向下一个数字。并且,还有一个指向当前数字的元素。当我运行代码时,控制台返回“NullPointerException”。代码背后的逻辑对我来说似乎没问题。我是初学者,我真的很感激一些帮助。我试图尽可能多地评论代码,以便更清楚地理解。谢谢。

aux = start; //aux points to the start of the list. both of them are of the type 'List'
            int prev = start.num; //prev points to the number on the start position. both of them are of the type 'int'
            while (aux.next != null) { //aux.next means the pointer to the next element in the list
                if (aux.num >= aux.next.num) { //if the current number is greater than the next number, or equal
                    prev = aux.next.num; //prev recieves the lower number
                    aux.next.num = aux.num; //the greater number is put after the lower number
                    aux.num = prev; //the lower number is put before the greater number
                }
                aux = aux.next; //the current element takes a step to the next element so I can progress through the list
                aux.num = aux.next.num;
        }

编辑:我忘了说这个列表必须按升序排序。它也必须按另一种方法降序。

2 个答案:

答案 0 :(得分:2)

它发生在你的while循环的最后两行。

aux = aux.next; //the current element takes a step to the next element so I can progress through the list
aux.num = aux.next.num;

在此您指定aux = aux.next,然后执行aux.num = aux.next.num;。 如果aux现在是列表的最后一个元素,则aux.nextnullaux.next.num将投放NPE。

为了防止这种情况,您可以在访问num之前进行另一项检查:

aux = aux.next;
if(aux.next != null) {
    aux.num = aux.next.num;
}
else {
    break;
}

答案 1 :(得分:1)

您正在检查aux.next是否为空,但是您没有检查aux.prox的这种情况(我相信,prox是指针)。

修改

所以......看看

aux = aux.next;
aux.num = aux.next.num; 

您必须检查新aux.next是否不为空