问题:

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

最佳答案

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

10-08 09:02