2017-02-17 72 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。