删除/删除LinkedList Java中的任何第n个节点

时间:2017-02-22 21:56:24

标签: java linked-list nodes

我想知道如何删除LinkedList中的任何第n个节点,例如:

1-2-3-4-5-6- 删除任何n = 2后: 1-3-5- 或者n = 3: 1-2-4-5

谢谢!

2 个答案:

答案 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);
    }
}