2016-11-23 9 views
-1

参考操作の問題に直面しています: 最初にこれは値xをとり、X以下の値を持つリンクを削除するコードですが、それは私に不規則な出力を与えます。ヘルプは高く評価されています。単独リンクリスト参照操作

public void rlx (int x){ 
     Link p = head;//Initializing a pointer equal to head 
     for (Link c = head.next; c!=null;c=c.next) {//Initializing another Pointer with the Condition to termination 
      if((int)head.data<=x){//If the Value of head< = to X 
       head=head.next;//Skip the first and assign head to the second 
      }else if((int)c.data<=x){ 
       p.next=c.next;//P.next skip c by pointing to c.next instead of c; 
      } 
      p=c; reinitialize p; 
     } 

    } 

主な方法:

public static void main(String [] args){ 
    LinkList l = new LinkList(); 
    l.insertLast(1); 
    l.insertLast(2); 
    l.insertLast(3); 
    l.insertLast(4); 
    l.insertLast(3); 
    l.insertLast(2); 
    l.insertLast(1); 
    l.rlx(3); 
    System.out.print(l); 
} 

出力:[4,2]

+0

何が起こっているのかを診断するためにもさらに情報が必要です。私が見ているところでは、データの挿入に問題があるかもしれません。 – Makoto

+0

他のすべての値がx以下であるため、出力結果が[4]である必要があるため、この問題はデータ削除によるものだと思います。私は別のリンクされたリストを使用せずにそれを行うことができると期待した。このクラスは私によって作られており、このメソッドは内部的にあることに注意してください。@ Makoto –

答えて

0

あなたのアルゴリズムは、問題をたくさん持っている、私は本当にどこから始めればわかりません。まず、各ループの反復で頭部をチェックするべきではありません。ただ、c.dataが< = xであるかどうかだけ調べるべきです。第2に、それに続くノードへの前のポインタを指すだけで、リンクされた単一のリストからノードを削除しません。 c.data> xがすべての反復でない場合にのみ、p = cを設定する必要があります。私は一般的に、それは基本的に疑似コードですので、私はそれをテストするために困っていません、と私はあなたのリンクタイプがポインタオブジェクトであると仮定してい

public void rlx (int x){ 
    While(head != null && (int)head.data <= x) { 
     head = head.next 
    } 
    Link p = head;//Initializing a pointer equal to head 
    for (Link c = head.next; c!=null;c=c.next) {//Initializing another Pointer with the Condition to termination 
     if((int)c.data<=x){ 
      p.next=c.next;//P.next skip c by pointing to c.next instead of c; 
     } 
     Else { 
      p=c; 
     } 
    } 
} 

人々の宿題をやっに対してルールを持っているが、ここで

。基本的には、ガベージコレクションを明示的に行う必要がありますが、もっと重要なことは、whileループでxより大きい値を見つけてから、頭の後に値を取り除くために別のforループを使うことです。それ以外の場合、頭がxより小さく、cがxより小さい場合は頭を取り除きますが、それはcになりますが、pはまだ古い頭ですので、古い頭が頭を指すようにリストを更新します次の値は意味がありません。何もpを指しておらず、あなたの現在の頭はxよりも大きくないcです。すると、pはxにはならないcになります。 pは、xより大きい最も最近のリンクを指し示すだけで、xより大きい値のリンクを見つけた場合にのみ置き換えられます。

+0

ありがとうございました。 –

関連する問題