在 Hashtable 中检测循环。考虑给您一组键值对,这些键值对存储在 Hashtable 中。一个值也可能是一个键。如果所有这些键值对都存储在 Hashtable 中并给定一个键,我们应该能够检测到一个键的适当值。价值将是循环的入口点。示例:(键值对)
A->B
B->c
c->D
D->E
E->c
因此,当要求与键 A 对应的值应返回 C 时,D 的值应返回 D。
我是通过以下方式做到的,但我认为可以有更好的解决方案:
int count = 0;
char *keys[50];
getValue(char *key, bool for_cycle){
save_keys_cycle[count] = key;
if(for_cycle){
int i=0;
for(i = 0; i<count;i++ ){
if(strcmp(key, save_keys_cycle[i])==0){
count = 0;
return key;
}
}
}
count++;
char *value = lookup(hashtable, key);
if(value != null){
char *value = lookup(hashtable, value);
if(value != null){
getValue(value, true);
}
}else{
count = 0;
return value;
}
}
要提取一个值,调用将是
char *value = getValue(key, false); // I am using a global hashtable.
这很好用,但我想为 char[] 使用动态大小,而不仅仅是 50。如果我能找到更好的方法,那将是不言而喻的。