2017-11-20 7 views
-5

私は挿入機能を追加しました。表示は誰でも助けてくれるでしょう 私は削除をお願いします。あなたのコードとあなたの説明から、Java削除機能

public class Node 
{ 
    Object data; 
    Node next; 
} 

public class LkList { 
    public Node insertVar(Object var1, Node ls1) { 
     Node p = new Node(); 
     p.data = var1; 
     p.next = ls1; 
     ls1 = p; 
     return ls1; 
    } 

    public Node deleteVar(Object var1, Node ls1){ 
     // deletion function goes here 
    } 

    public void printL(Node ls1) { 
     System.out.print("The lklist of variables is: "); 

     Node p = ls1; 

     while (p != null) { 
      System.out.print("[" + p.data + "]" + "->"); 
      p = p.next; 
     } 
     System.out.println(); 
    } 
} 
+3

なぜあなたはhttps://stackoverflow.com/questions/47385901/java-deletion-functionや投稿を削除でしたを使用してノードを比較しないでください。再び? – Eran

+2

**何から?** – EJP

+0

@Eran削除されたので、私は推測しています。 –

答えて

-1

私はls1はあなたのリストの最初のノードであり、あなたがそのdataとしてvar1を持って、リスト内の最初のノードを削除することを前提としています

public Node deleteVar(Object var1, Node ls1) 
{ 
    if (ls1.data.equals(var1)) 
    { 
     //simply pop the first node 
     return ls1.next; 
    } 
    else 
    { 
     Node prev = ls1; 

     while (prev.next != null) 
     { 
      if (prev.next.data.equals(var1)) 
      { 
       // skip the node by linking the previous one to the next one directly 
       prev.next = prev.next.next; 
       break; 
      } 
     } 

     return ls1; 
    } 
} 
+0

ありがとう...本当にありがたいです。 – saaki

+0

あなたは大歓迎です。あなたが尋ねる次の質問については、より簡潔にするようにしてください。あなたのコードの不要な部分を削除するためにあなたの質問を編集したのを見たことがあるかどうか分かりません(少なくとも、この質問には不必要です)。コードスニペットを最小限に抑えれば、簡単に聞いたことを理解することができます。また、私はあなたの質問の下のコメントにリンクされている質問をチェックしたいかもしれません。その答えはより詳細であり、例えば「ヌル」を扱う。 –

+0

私のコードではメニューがあるので、1を選択すると変数に値を挿入することができます。コード1を実行して2の表示を3回削除する4-exit ...を選択します1を挿入するので、最初に変数(a)と値(2)などを挿入するように頼みますが、削除したいときはまず変数と値を入力するように頼みます。それは役に立ちます – saaki

1

削除ノードの参照アクセシビリティを削除するだけです。 あなたの場合、変数の与えられた値を比較することによってノードを削除します。したがって、ヘッドノードから始めて、各ノードのデータ(具体的には変数データ)を比較する必要があります。 2つのノードのデータを比較してから、単にリンクリストの削除ロジックを適用するだけです。ここで重要なのは、2つのノードのデータを比較することのみです。

.equals()メソッド

public Node deleteVar(Object var1, Node ls1) { 
    if (ls1.data.varName.equals(var1.varName) && ls1.data.varValue.equals(var1.varValue)) { // If it is the first node which is to be deleted 
     return ls1.next; 
    } 
    else { 
     Node prev = ls1; 

     while (prev.next != null) { 
      if (prev.next.data.varName.equals(var1.varName) && prev.next.data.varValue.equals(var1.varValue)) { 
       // skip the node by linking the previous one to the next one directly 
       prev.next = prev.next.next; 
       break; 
      } 
     } 

     return ls1; 
    } 
} 
+0

私の答えを編集するのではなく、コピー/ペーストする場合は、少なくとも適切にコンパイルするコードを書くべきです。私はデータ/変数に 'Object'を使っています。したがって、名前と値はありません。私はリンクされたリストロジックに集中するのを容易にするので、コードを単純化するために 'equals'を使いました。その上に、私は平等が何を意味すべきか(名前や名前と価値だけ?)さえ知らない。変数はlinkedListにハードワイヤードで書くのではなく、 'equals'メソッドで定義する必要があります。 –

+0

申し訳ありません、私を許してください。私は上記の事実を知らなかった。そして私はできるだけ早く自分のコードに修正を加えます –