链接列表中的频率

时间:2016-03-07 19:30:52

标签: c++ list frequency

我正在尝试创建一个名为frequency的fn,它返回链表中给定整数的频率。 到目前为止:

respond_to do |format|
  format.js { render json: { html: render_to_string(partial: '/users/photos/card', object: @photo, as: 'photo') } }
end

但它返回的数字(应返回1)但返回8 我的链表有10个元素(0-9

2 个答案:

答案 0 :(得分:1)

等于e的检查应该在for循环的主体中完成。

int IntSLList::frequency(int e)
{
    int total = 0;
    IntSLLNode *temp;
    for (temp = head; temp!=0 ; temp = temp->next)
    {
        if( temp->info == e )
            total++;   
    }
    return total;
}

答案 1 :(得分:1)

这种情况:temp!=0 && !(temp-> info ==e)会让你算上两件事中的第一件:

  1. 列表的结尾。
  2. 第一次到达e
  3. 这不是您想要的行为,因此您需要调整条件。我们想要什么?

    1. 我们从列表的开头到结尾,无论数字如何,所以我们的for循环看起来像:for(IntSLLNode *temp = head; temp; temp = temp->next)
    2. 我们要检查每个元素是否有一个等于e的数字:
    3.  if (temp->info == e) {
           total++;
      }
      

      这给了我们最后的循环:

      int IntSLList::frequency(int e) {
          int total = 0;
          for (IntSLLNode *temp = head; temp; temp = temp->next) {
              if( temp->info == e ) {
                  total++;
              }   
          }
          return total;
      }