2016-07-12 5 views
2

対LinkedListNodeを使用するとき、私はコーディングのインタビューを割れからこの問題を理解し、トラブルを抱えている:LinkedListの

:ソートされていないリンクリスト

ソリューションから重複を削除する

コードを記述

public static void deleteDups(LinkedListNode n){ Hashtable table = new Hashtable(); LinkedListNode previous = null; while(n != null){ if(table.containsKey(n.data)) { previous.next = n.next; } else{ table.put(n.data, true); previous = n; } n = n.next; } } 

LinkedListではなくLinkedListNodeを渡す理由はわかりません。リンクされたリストからdupを削除したいのであれば、なぜリスト全体を反復するのでしょうか?

+3

「n」がリストの先頭であると仮定すると、違いはありません。 – shmosel

+0

[JavaのLinkedListNodeとは何か]の可能な複製(http://stackoverflow.com/questions/5374077/what-is-linkedlistnode-in-java) –

+0

リスト全体の代わりにノードを渡すと、ユーザーは開始点を定義できますリスト全体を処理するのではなく、ポイント(開始するノード)を指定します。それがどこかに必要かどうかはわかりません。そうでない場合、大きな違いはありません。 –

答えて

3

名前にはLinkedListが表示されているので、開始ノードがある場合はリストがあります。 LinkedListは、異なるメモリ空間に異なるノードの単なるチェーンであり、連続した空間の塊である配列のように扱われたり、期待されたりしません。

0

ここLinkedListNodeがここ

public LinkedListNode{ 
    int data; 
    LinkedListNode next; 

    public LinkedListNode(int data){ 
    this.data = data; 
    next = null; 
    } 

    } 
    LinkedListNode head = new LinkedListNode(1); 
    LinkedListNode node1 = new LinkedListNode(2); 
    LinkedListNode node2 = new LinkedListNode(3); 
    head.next = node1; 
    node1.next = node2; 
    //1->2-3 
    deleteDups(head); 

headノード(データ= 1)として、クラスでは、私たちがdeleteDupsに渡している作成されたリンクリストの先頭です。 この関数では、nextを使用して与えリストを反復処理しています。

+0

もう1つの考慮すべき点は、このようなデ・デュプリケータは、例えば、何らかの形で再帰を使用しているかもしれない「木や木のような」状況で使用できるということです。*しかし、実際にはかなり恣意的な決定です。この関数を正しく書くことができます。 –