2017-02-22 10 views
-3

私は、例えばLinkedListの内の任意のn番目のノードを削除する方法を知りたい:削除/ LinkedListはJavaで任意のn番目のノードを削除

1-2-3-4-5-6- をした後の任意のnを削除= 2: 1-3-5- またはn = 3: 1-2-4-5

ありがとうございました!

+0

.remove(インデックス)は動作しません。 ? – Loc

+0

Javadoc:[remove(int index)](http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#remove(int)) –

+1

inbuiltクラスを使用していない場合'LinkedList'をクリックすると、このリンクが役立ちます(n> 2で一般化するだけです): http://www.geeksforgeeks.org/delete-alternate-nodes-of-a-linked-list/ –

答えて

1

は、Java 8の上にある場合は、次のように実行します。

linkedList.removeIf((i) -> i % n == 0); 

例:

int n = 2; 
LinkedList<Integer> ll = new LinkedList<>(Arrays.asList(1,2,3,4,5,6)); 

ll.removeIf((i) -> i % n == 0); 
System.out.println(ll); 
+0

まだLinkedListを使用することはできません リンクリストを作成します – user154

0

を私は混乱を削除すること、それが非常に明確になされていなかったという事実から来たと考えています最初のリストにあるように、n番目の要素ごとに、これが質問にマークされた理由です。しかし、ここで

はそれを行うための一つの方法です:

public class ListRemover<T> { 
    public void removeEvery(int n, List<T> list) { 
     int i = 1; 
     int removeFrom = n - 1; 
     while (removeFrom < list.size()) { 
      list.remove(removeFrom); 
      ++i; 
      removeFrom = n * i - i; 
     } 
    } 
} 

そしてここでは、毎秒のための試験であり、それを証明ebery第三除去は動作します:

public class ListRemoverTest { 
    @Test 
    public void shouldRemoveEverySecondElement() throws Exception { 
     List<Integer> intList = IntStream.range(1, 10).boxed().collect(toList()); 
     new ListRemover<Integer>().removeEvery(2, intList); 
     assertEquals(Arrays.asList(1, 3, 5, 7, 9), intList); 
    } 

    @Test 
    public void shouldRemoveEveryThirdElement() throws Exception { 
     List<Integer> intList = IntStream.range(1, 10).boxed().collect(toList()); 
     new ListRemover<Integer>().removeEvery(3, intList); 
     assertEquals(Arrays.asList(1, 2, 4, 5, 7, 8), intList); 
    } 
} 
+0

まだLinkedListを使用できません リンクリストを作成します – user154

関連する問題