2017-02-22 42 views
-3

я хотел бы знать, как удалить любой п-й узел в LinkedList, например:удалить/удалить любой п-й узел в LinkedList Java

1-2-3-4-5-6- после удаления любого п = 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

Если вы не используете встроенный класс '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