链表中的频率

Frequency in linked Lists

本文关键字:频率 链表      更新时间:2023-10-16

我正在尝试制作一个名为 frequency 的 fn,它返回链表中给定整数的频率。迄今:

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

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

检查等于 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;
}

这个条件: temp!=0 && !(temp-> info ==e) 导致您最多数到两件事中的第一件事:

  1. 列表的末尾。
  2. 第一次到达e.

这不是您想要的行为,因此您需要调整条件。我们想要什么?

  1. 无论数字如何,我们从列表的开头到结尾,因此我们的 for 循环如下所示:for(IntSLLNode *temp = head; temp; temp = temp->next) .
  2. 在每个元素中,我们要检查我们是否有等于 e 的数字:

 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;
}