如何使用java中的hittable方法实现一个检测循环的函数

时间:2017-03-25 08:05:38

标签: java linked-list hashtable

问题:

我想应用哈希表方法来检测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;    
    }
}

2 个答案:

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

所以在这种情况下,这个实现是正确的,如果存在则检测到循环。