2016-12-02 11 views
0

私のエラーは表示されません。私はinsertメソッドが新しい要素をすべて順に追加するリストを使用しています。私はこの場合ハッシュテーブルを使用しないようにしています。 私はコントロールフローグラフを書いて紙に書いてあり、それらの媒体では理にかなっているようですが、私が探している結果を得ることができません。 マイリスト:0,1,1,1,2,4,5,7 私はこの方法でそれを実行した後、それはまったく同じである:リンクリストで重複を削除する

public class List { 

int value; 
List next; 

List(int value, List next) { 
    this.value = value; 
    this.next = next; 
} 

} 
public void deleteDuplicates() { 
    List marker = head; 
    List pointer = marker; 

    while(marker != null && marker.next != null){ 
     while(pointer.next != null){ 
      if(marker.value == pointer.next.value){ 
       pointer.next = pointer.next.next; 
      } 
      else{ 
       pointer = pointer.next; 
      } 
     } 
     marker = marker.next; 
    } 
} 
+1

'next'と[値]は奇妙に見えます。あなた自身のリストクラスを作ったことがありますか?これらの名前で 'LinkedList'にフィールドがないことは間違いありません。 – Gendarme

+0

ええ、それは実際にどのように動作するかを学ぶためのものです。 javaが提供するクラスを使用するのとは対照的に、私は自分のリストを使用していました。値はリスト内の要素で、次に参照ポインタです。 – Shaun

+1

私はクラスを見なければならないと思います。 [mcve]を提供してください。 – Gendarme

答えて

0

あなたが終了した後pointer変数をリセットしていません後にmarker = marker.next;の後に追加する必要があります。pointer = marker;

NodeListではなくより良い名前です。

0

コードには、2つのポインタ(とpointer)があり、2番目のポインタ(pointer)を使用していないという問題があります。あなたが同じ値を渡って来るならば、あなたはポインタをインクリメントしていますが、それを一切使わずにpointerを捨ててしまいます。次のように重複を排除する

より簡潔な方法は次のようになります -

List marker=head; 
    List pointer; 

    while(marker != null && marker.next != null){ 
     pointer = marker.next; 
     while(pointer != null && marker.value == pointer.value){ //Skip nodes which have same value 
       pointer = pointer.next; 
     } 
     marker.next = pointer; 
     marker = marker.next; 
    }