1

编写一个方法,缩小,从员工姓名的 LinkedList 中删除每个第 n 个元素。

import java.util.LinkedList;
import java.util.ListIterator;

public class LinkedListDemo
{

   public static void main(String[] args)
   {
      LinkedList<String> staff = new LinkedList<String>();
      staff.add("John");
      staff.add("Bob");
      staff.add("Richard");
      staff.add("Alice");
      staff.add("Jane");
      staff.add("Carlos");
      staff.add("Jose");
      staff.add("Maria");

      downsize(staff, 3);
      System.out.println(staff);
      System.out.println("Expected: [John, Bob, Alice, Jane, Jose, Maria]");

   }

   public static void downsize(LinkedList<String> employeeNames, int n)
   {
      ListIterator<String> iter = employeeNames.listIterator();

      for(int i=n; i<employeeNames.size(); i++)
      {
         iter.next();
      }

      iter.remove();


   }

}

我很难找到一个可以删除 ListIterator 中任何第 n 个元素的完美循环。谢谢你!

4

2 回答 2

3

这将从employeeNames LinkedList 中删除每个第n 个元素:

for(int i=0; i<employeeNames.size(); i++)
  {
     iter.next();
     if (i % n == 0) iter.remove();
  }
于 2012-04-04T22:36:58.683 回答
0

永远不要修改您当前正在迭代的列表。疯狂的谎言就是这样。

public static List<String> downsize(List<String> employeeNames, int n) {
    Set<String> employeesToRemove = new HashSet<String>();
    for (int index = n; index < employeeNames.size(); index += n) {
        employeesToRemove.add(employeeNames.get(index);
    }
    employeeNames.removeAll(employeesToRemove);
}

但是,如果您绝对必须遍历数组,这也是一种疯狂。

public static List<String> downsize(List<String> employeeNames, int n) {
    for (int index = employeeNames.size() -  (n -(employeeNames.size()  % n))  ; index >= 0; index -= n) {
        employeeNames.remove(index);
    }
    return employeeNames;
}
于 2012-04-04T23:10:06.733 回答