遍历链表以查找字符串

时间:2018-04-04 03:17:45

标签: c++ linked-list traversal

我需要循环遍历链表的向量,并检查是否存在具有字符串的节点。显然,这只会检查开头是否存在。我想知道如何浏览整个链表。

vector <Dlist *> table; //Dlist is the linked list

int DL_Hash::Present(string &s) {

    int index = djb_hash(s) % table.size();
    for(int i = 0; i < table[index]->Size(); i++) {
        if(table[index]->Begin()->s == s) {
            return 1;
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您根本没有使用变量i,而且您确实无法执行table[index][i]之类的操作,因为您无法索引链接列表。你只能在列表中获得第一个元素,然后立即获得。

首先你得到指向开头的指针(迭代器会更合适)。然后检查每个项目的条件,直到您在列表的末尾。

int DL_Hash::Present(string &s) {

    int index = djb_hash(s) % table.size();
    auto tmp = table[index]->Begin();
    while (tmp != nullptr) { // check if you are at end of linked list
        if (tmp->s == s)
            return 1;
        tmp = tmp.Next(); // asuming you have function to get next element in linked list.
    }
    return 0;
}

如果Dlist有迭代器:

int DL_Hash::Present(string &s) {

    int index = djb_hash(s) % table.size();
    auto tmp = table[index]->begin();
    while (tmp != table[index].end()) { // check if you are at end of linked list
        if (tmp->s == s)
            return 1;
        tmp++;
    }
    return 0;
}

甚至更好,使用范围

int DL_Hash::Present(string &s) {

    int index = djb_hash(s) % table.size();
    for (auto &tmp : table[index]) {
        if (tmp->s == s)
            return 1;
        }
    return 0;
}