2017-02-17 64 views
0

我想了解如何从java中的LinkedList中删除重复项。我搜索了一下,发现了一些答案,但是他们在Node中提到的一些答案中。我没有从这个节点来自哪里,因为我没有看到LinkedList中的任何方法以“节点”的形式返回值。如何通过保留订单删除链接列表中的重复

如果有人帮助我理解这一点,那将会很棒。

回答

1

遍历链表,将每个元素添加到散列表。当我们发现重复的元素时,我们删除元素并继续迭代。自从我们使用链表后,我们可以一次完成所有操作。

以下解决方案需要O(n)次,n是链接列表中元素的数量。

public static void deleteDups (LinkedList<Integer> list){ 
    HashMap<Integer, Boolean> map = new HashMap<>(); 
    Iterator<Integer> itr = list.iterator(); 
    while(itr.hasNext()){ 
     int nextNode = itr.next(); 
     if(map.containsKey(nextNode)){ 
      itr.remove(); 
     } else { 
      map.put(nextNode, true); 
     } 
    } 
} 
+0

感谢amansinghal响应。我没有从这个LinkedListNode来自哪里? – OneTwo

+0

LinkListNode只是一个抽象的概念,基本上我们将链接列表中的条目称为节点。我更新了代码,以便您更容易理解。 – AmanSinghal

0

您不能访问节点,因为这会暴露LinkedList的内部。你可以使用Iterator并迭代List;迭代器将跟踪节点并在迭代器上调用remove。

相关问题