0

現在のノードの値が次のノードの値と等しいことを再帰関数がチェックし、1ずつインクリメントするようにします。それ以外の場合は、リストの最後までインクリメントして先に進みません。したがって、1、2、2、3、1、1のリストの場合、2、2は隣接する複製であり、1、1は隣接する別の複製であるため、2を返す必要があります。

現在の値が次の値と等しくない場合の誤ったケースの処理方法がわかりません。基本的に、インクリメントしません。

これはこれまでの私のコードです...

int fn(Node l) {
    if (l == null)
        return 0;
    else 
        return (l.value == l.next.value) ? (1 + fn(l.next)) : ;
}
4

1 に答える 1

2

どちらの場合も、関数を再度呼び出す必要があります。 false の場合は1、戻り値に追加しません。つまり、

return (l.value == l.next.value) ? (1 + fn(l.next)) : fn(l.next);

が最初でl.nextはないことも確認する必要があります。nullしたがって、関数を書き直すことができます...

int fn(Node l) {
   if (l == null || l.next == null)
       return 0;
   return (l.value == l.next.value ? 1 : 0) + fn(l.next);
}
于 2012-10-13T18:07:03.983 に答える