链接列表空错误

时间:2014-03-22 03:21:54

标签: java nullpointerexception

我编写了以下代码来计算LinkedList中所有偶数条目的总和。但是,由于我使用NullPointerException的行,我一直收到(n.getNext).getNext() 任何人都可以告诉我为什么会这样吗?

以下是我所指的代码:

public int sumEven() {
    return sumEven(head);
}

// private sumEven helper
private int sumEven(IntListNode n) {
    int nodeNumber=1;
    int count=0;
    if(n.getNext() == null && nodeNumber%2 == 0) {
        return n.getValue();
    } else if((n.getNext()).getNext() == null && nodeNumber%2 == 0) {
        return n.getValue();
    } else {
        nodeNumber++;
        if(nodeNumber%2 == 0) {
            count+=n.getValue();
            return count+ sumEven(n.getNext());
        } else {
            return count + sumEven(n.getNext());
        }
    }       
}

2 个答案:

答案 0 :(得分:0)

因为如果:在第一个if语句中,n.getNext()为null但nodeNumber%2不等于0 所以你转到下一个if语句,它说n.getNext()。getNext()== null,其中第一个getNext()为空,因为它传递了前一个if语句的第一部分,但由于nodeNumber%2 == 0 part。

Ex:nodeNumber = 1,n.getNext()= null

首先if(true&& false)=>假

第二个if(ERROR)Cuz前一个if语句的第一部分为true,表示n.getNext()为null

答案 1 :(得分:0)

代码中存在许多问题。怎么重新考虑这个策略?如果要使其递归,可以假设将始终使用偶数节点调用私有方法sumEven()。然后,所有私有方法都会添加它所调用的任何内容。

以下代码未经过测试,但显示了我的意思。

public int sumEven() {
    return sumEven(head,0);
}

private int sumEven(IntListNode n, int total) {
    if(n==null) return total;

    total += n.getValue();  // sums up running total

    if(n.getNext()==null) return total;

    return sumEven(n.getNext().getNext(),total); // calls next even node with current running total
}