我想知道如何删除LinkedList中的任何第n个节点,例如:
1-2-3-4-5-6- 删除任何n = 2后: 1-3-5- 或者n = 3: 1-2-4-5
谢谢!
答案 0 :(得分: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);
答案 1 :(得分: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;
}
}
}
这是每一秒的测试和第三次删除,证明它有效:
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);
}
}