我需要循环遍历链表的向量,并检查是否存在具有字符串的节点。显然,这只会检查开头是否存在。我想知道如何浏览整个链表。
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;
}
答案 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;
}