2017-04-01 4 views
3

リンクリストをそのように変更する方法はありますか?単一リンクリストから重複を削除する

これは、線形時間と一定のメモリ使用のために行う必要があると考えています。リストのすべての要素をHashMapに入れようとしましたが、これは一定の時間を与えていますが、線形のメモリ使用量をもたらします。

別の方法がありますか?

+0

を。 –

+0

線形メモリの使用で何が問題になりますか?一定のメモリー使用量が必要な場合は、重複を除去するためにn^2操作が必要です。 –

答えて

1

あなたは線形時間のためにそれを行うにはstream().distinct()メソッドを使用することができます。

List<String> result = list.stream() 
     .distinct() 
     .collect(Collectors.toList()); 
+2

これは、一定のメモリ使用量とは異なります。そしてそれはリストを修正することさえしない。別のものが作成されます。 –

+1

そして、それは線形時間で行うことが可能です。それがあなたのコードがすることです。 –

+0

@JBNizet私の間違い。訂正していただきありがとうございます。 –

0

は、アルゴリズム的にそれは不可能に聞こえる(またはここで誰かが私を驚かせるでしょう)。

しかし、あなたは本当に道任意のアルゴリズム作ることなく、重複せずにリストのシミュレーションを作成することができます:それは実行することはできません

public class SimulatedNoDuplicatesList extends LinkedList { 
    private List originalList; 
    SimulatedNoDuplicatesList(List original) { 
     originalList = original; 
    } 
// override all the methods that you want to use with the old list. for example 
// @Override 
    public Object get(int i) { 
     if (!super.contains(i) && originalList.contains(i)) { 
      super.add(originalList.get(i)); 
     } 
     return super.get(i); 
    } 
} 
関連する問題