2016-10-22 8 views
1

メソッドの仕組みを理解するための助けが必要です。Javaリンクリスト内のノードへの参照

私はこのように定義された基本的なNodeクラスています

class Node { 
    Node next = null; 
    int data; 
    public Node(int d){ 
     data = d; 
    } 
} 

今、私はこのdeleteDuplicatesメソッドが動作しているかで探しています。私は、各ノードを繰り返し通過してその値をセットに格納していることを理解しています。値がすでにセットに入っている場合は、前のノードのnextポインターを現在のノードをスキップするように設定していると思います。

public static Node deleteDuplicates(Node head){ 
    Node n = head; 
    HashSet<Integer> set = new HashSet<Integer>(); 
    Node previous = null; 
    while(n != null) { 
     if (set.contains(n.data)){ 
      // skip this node 
      previous.next = n.next; 
     } 
     else { 
      set.add(n.data); 
      previous = n; 
     } 
     n = n.next; 

    } 
    return head; 
} 

私は、変数previousnについて困惑している:ここでの方法です。 previous = n;と設定すると、同じオブジェクトを参照するようになっていませんか?同じオブジェクトを参照する場合、nに変更すると、previousと同じになります。だから、どのように行previous.next = n.next;は機能しますか?

ありがとうございます!

+0

に役立ち、以前は、このように前がNに設定された後、次のノードであり、nは削除部分について

n.nextあり、その次のノードに移動され'previous.next = n.next;' 'previous = n.next;'にするべきではありませんか? – c0der

+0

@ c0derそれは問題ないですが、それでも参照用の質問は説明しません –

+0

このメソッドが間違っていると思われますので尋ねます。 'previous'が' null'のときに 'previous.next'を使うのは一例です。 – c0der

答えて

2

そこで、一緒に

previous = n; 
n = n.next; 

をこれらの2行を読み取るノードが処理されると、前及びnのポインタを前方に移動されます。 nは期待以下の図は

enter image description here

+0

ありがとう、私はこれが私のために物事をクリアすると思います。私はリンクされたリスト全体を1つのオブジェクトとして見ていました。実際には一連のオブジェクト(ノード)です。したがって、nを次のノードに変更すると、同じことをもう参照していません。私はダイアグラムに感謝します! –

関連する問題