2016-04-20 11 views
0

私はリンクされたリストを処理することについて学んでいます。ノード内の項目を再帰的にどのように追加しますか?私はsum = h.item +h.next.item+h.next.next.itemを実行してそれらを追加することができますが、それは私が小さなリンクリストを持っていた場合にのみ動作します。以下は、失敗した関数addAllです。ノードの項目を再帰的に追加します。リンクされたリスト

public class nodeP { 

    public static void main(String[] args) { 
     node H = new node(9); 
     H.next = new node(7); 
     H.next.next = new node(5); 

     System.out.println(addAll(H)); 
    } 

    static int addAll(node h) { 
    int sum = 0; 
    if(h.next!=null) { 
    sum += h.item + addAll(h.next); 
} 
    return sum; 
    } 
} 
+1

ノート。 –

答えて

2

あなたのコードは、最後のノードを追加しませんように見えます。 h.nextnullの場合でも、合計にh.itemを追加する必要があります。

試してください:あなたは、多くの数字を持っている場合、あなたはあまりにも多くの再帰呼び出しを避けるために、代わりにwhileループを使用することを検討すべきであることを

static int addAll(node h) { 
    int sum = h.item; 
    if (h.next != null) { 
     sum += addAll(h.next); 
    } 
    return sum; 
}