如何递归计算链表的平均值?

时间:2017-07-01 18:33:41

标签: java recursion linked-list

这是一个java代码,我应该使用递归来添加链表的偶数。这就是我提出的,但它没有成功。我的java编译器在这个语句中进入无限循环:ave(i.getNext());

    public double ave (Node b)
 {
    Node i = head;
     if (i == null)
         return 0;

     else 
    {
        if (i.getData()%2==0)
        {
            sum = i.getData() + sum;
            count++;
        }
        if (i.getNext() != null)
        ave(i.getNext()); 

     return sum/(double)count;
 }

1 个答案:

答案 0 :(得分:0)

问题是您每次都要i分配给head。永远不会使用b

你想:

public double ave() {
    return aveRec(head, 0, 0);
}

private double aveRec(Node n, long sum, int count) {
    if (n == null) {
        if (count == 0) {
            // what to return if the linked list is empty?
            return 0;
        }
        return (sum * 1D) / count;
    }
    if (n.getData() % 2 == 0) {
        return aveRec(n.getNext(), sum + n.getData(), count + 1);
    } else {
        return aveRec(n.getNext(), sum, count);
    }

}