1

従業員名の LinkedList から n 番目ごとの要素を削除するメソッド downsize を記述します。

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 に答える