2017-02-17 3 views
0

私はLinkedListから複製を削除する方法を理解しようとしています。私はグーグルで、いくつかの答えを見つけましたが、彼らはノードとして言及した答えの中にいくつか答えました。私はこのノードがどこから来ているのか分からないのですが、LinkedListに値が「ノード」として返されるメソッドがないのでオーダーを保持してリンクリストの複製を削除するには

これを理解するのに役立つ人がいれば素晴らしいことでしょう。

答えて

1

リンクリストを繰り返し、各要素をハッシュテーブルに追加します。重複した要素を発見すると、その要素を削除して反復処理を続行します。リンクされたリストを使用しているので、これをすべて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の内部が公開されるためです。イテレータを使用してリストを反復することができます。イテレータはノードを追跡し、イテレータではremoveを呼び出すことができます。下のリンクを介して

関連する問題