【问题标题】:Finding elements that repeat in a SLL查找在 SLL 中重复的元素
【发布时间】:2020-10-13 23:38:13
【问题描述】:

此函数计算给定元素在单链表中出现的次数,如果值不在列表中或列表为空,则返回 0。当前列表有{97,92,75,97,97}。 它应该返回 3 但我的代码只返回 1 我的代码有什么问题?

template <typename Data_t>
size_t SLinkedList<Data_t>::freq(Data_t element) {
    
    Node* ptr;
    ptr = _head;
    
    
    if(empty()) return 0;
    
    while (ptr != nullptr) {
        size_t count = 0;
        if( ptr->_data == element) {
            ptr = ptr->_next;
            count++;
        }
        return count;
    }
    return 0;
}

【问题讨论】:

  • ptr = ptr-&gt;_next;return count; 都在错误的地方。
  • 不要太热衷于到处使用 TLA。

标签: c++ list singly-linked-list


【解决方案1】:

这个循环有几个问题:

while (ptr != nullptr) {
        size_t count = 0;
        if( ptr->_data == element) {
            ptr = ptr->_next;
            count++;
        }

        return count;
    }

如果找到元素,您只会移动到下一个节点。

此外,您正在循环内初始化count,并无条件地从循环内返回count。这意味着循环返回 0 或 1,具体取决于第一个节点是否包含您要查找的元素。


编写函数的正确方法是:

template <typename Data_t>
size_t SLinkedList<Data_t>::freq(Data_t element) {

    size_t count = 0;
    
    for (Node *ptr = _head; ptr != nullptr; ptr = ptr->_next;) {
        if( ptr->_data == element) {
            count++;
        }
    }
    return count;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2022-01-18
    • 2014-04-21
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多