2017-01-30 8 views
1

私は現在、指定されたターゲット整数の前にリンクリストに要素を追加できるコードを作成中です。これはこれまでのところです。ターゲット整数の前に新しい整数を追加しますか?

package node; 

public class IntNode { 

    public int data; 
    public IntNode next; 
    public IntNode(int data, IntNode next) { 
     this.data = data; this.next = next; 
    } 
    public String toString() { 
     return data + ""; 
    } 


    public static IntNode addBefore(IntNode front, int target, int newItem) { 
     IntNode ptr = front; 
     while(ptr != null) 
     { 

      if(ptr.data == target) 
      { 
       IntNode temp = new IntNode(newItem, ptr.next); 
       ptr.next = temp; 
      } 
      ptr = ptr.next; 
     } 
     return front; 

    } 

    public static void main(String[] args) { 
     IntNode L = null; //handle for the beginning of the LL 
     L = new IntNode(19, null); 
     IntNode temp = new IntNode(17, L); 
     L = temp; 
     addBefore(L, 17, 20); 
     traverse(L); 
    } 

     public static void traverse(IntNode front){ 
      IntNode ptr = front; //ptr points to the first node of the LL 

      while(ptr != null){ 
       System.out.print(ptr.data + " -> "); 
       ptr = ptr.next; 

     } 
     System.out.println("//"); 
     } 
    } 

もちろん、ターゲットの前に追加する代わりに、新しいノードのtempが追加されています。ポインターの方向を逆にして、ターゲット整数の前のスペースを指すように移動する方法はありますか?

+0

あなたの[tag:javascript]質問タグを削除しました。 JavaとJavaScriptは完全に異なる2つの言語であり、質問タグと質問タイトルが質問の最も重要な部分であり、いずれかがオフの場合、正しい専門家が質問を表示することはありません。ちょうどFYI。 –

+0

1)常に 'ptr'の後ろにある' previous'ポインタを保持します。 2)リストの最初の要素がターゲットを持つケースを処理するようにしてください。特別な処理が必要なためです。 – ajb

+0

'static'修飾子を' addBefore() 'から削除してください。その後、パラメータリストから 'IntNode front'を削除することもできます。 'L.addBefore(17、20)'のようなものを呼び出します。また、 'addBefore()'にいくつかの変更を加える必要があります。 Javaでのオブジェクト指向プログラミングについてもっと学びましょう。 –

答えて

0

を使用すると、ターゲット・ノードを見つけたら、あなたはptrを指して新しいノードのnextフィールドでprev後に新しいノードを追加できるようにptr前に、ノードを指すように、のは、それはprevだとしましょう、第2のポインタを使用してください。ただし、ターゲットがリストの先頭であるかどうかを確認する特別なケースがあります。この場合、新しいノードをリストの新しいヘッドにする必要があります。これはどのように見えるのですか?

public static IntNode addBefore(IntNode front, int target, int newItem) { 
    IntNode prev = null; 
    IntNode ptr = front; 
    while(ptr != null) 
    { 
     if(ptr.data == target) 
     { 
      if(prev == null) 
      { 
       front = new IntNode(newItem, front); 
      } 
      else 
      { 
       prev.next = new IntNode(newItem, ptr); 
      } 
      break; 
     } 
     prev = ptr; 
     ptr = ptr.next; 
    } 

    return front; 
} 
0

現在のノードのデータを変更するのはどうですか?

public static IntNode addBefore(IntNode front, int target, int newItem) { 
    if (front.data == target) { 
     IntNode currentFront = new IntNode(front.data, front.next); 
     front.data = newItem; 
     front.next = currentFront; 
    } else { 
     return addBefore(front.next, target, newItem); 
    } 
    return front; 
} 

あなた:

public static void main(String[] args) { 
    IntNode L = null; //handle for the beginning of the LL 
    L = new IntNode(19, null); 
    IntNode temp = new IntNode(17, L); 
    L = temp; 
    traverse(L); 
    addBefore(L, 17, 20); 
    traverse(L); 
} 

は私を与えた:

17 -> 19 -> // 
20 -> 17 -> 19 -> // 

別の試みを:

traverse(L); 
addBefore(L, 19, 20); 
traverse(L); 

ができます:

17 -> 19 -> // 
17 -> 20 -> 19 -> // 
関連する問題