问题:
我想应用哈希表方法来检测java中的循环,我已经为它实现了一个方法。
任何人都可以指导我是否正确?
实现:
public void detectLoop1()
{
Node tnode = head;
int i=0;
//Initialize the HashTable
Hashtable ht=new Hashtable();
//Traverse the list and while traversing if you find the address of
//the hittable is already in hashtable break the loop else insert the elements in hashtable.
while (tnode != null)
{
System.out.print(tnode.data+"->");
if(ht.contains(tnode)){
System.out.println("Found a Loop");
break;
}
ht.put(i, tnode);
i++;
tnode = tnode.next;
}
}
答案 0 :(得分:1)
public void detectLoop1()
{
Node tnode = head;
Set nodes = new HashSet();
while (tnode != null)
{
System.out.print(tnode.data+"->");
if(!nodes.add(tnode)){
System.out.println("Found a Loop");
break;
}
tnode = tnode.next;
}
}
当你把它作为关键词if(ht.contains(tnode))
ht.put(i, tnode);
答案 1 :(得分:0)
包含Hashtable类的方法检查对象的值:
if(var4.value.equals(var1)) {
return true;
}
所以在这种情况下,这个实现是正确的,如果存在则检测到循环。