遍历链表以查找字符串

Traverse through a linked list to find string

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

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

你根本没有使用变量 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;
}

或者更好,使用 range for

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