2016-04-24 3 views

Antwort

1

Halten Sie nicht an, die verknüpfte Liste zu durchlaufen, wenn Sie das erste Element löschen. Schleife bis du das Ende erreichst und lösche jede Instanz des gesuchten Gegenstands auf dem Weg.

+0

Nachdem Sie ein Element entfernt haben, werden die Indizes jedoch nach links verschoben. Wird es funktionieren? Ich vermute, das ist das Problem, das er hat. – Gendarme

+1

Warten Sie die Standard-libs-Implementierung von LinkedList verwenden? 'while (list.remove (object));' – Natecat

+0

Wenn Sie 'list.remove (index)' das Element, das zuvor seinen Index als 'index + 1' hatte, wird es jetzt als 'index' haben, oder? – Gendarme

1

Ich schrieb einen Testcode. Hier sind die Ergebnisse.

[11, 21, 5, 5, 31, 41] 
[11, 21, 31, 41] 

Der Trick dabei ist, die Liste von hinten nach vorne zu durchlaufen. Auf diese Weise müssen Sie sich keine Gedanken über die Anpassung der Indizes machen.

Der einfachste Weg wäre die Verwendung der Methode list.remove (value). Aber diese Methode ist effektiv, wenn Sie ein Feld in einem Java-Objekt anstelle von Integer überprüfen, wie es in diesem Beispiel der Fall ist.

package com.ggl.testing; 

import java.util.ArrayList; 
import java.util.List; 

public class ListRemove { 

    public static void main(String[] args) { 
     int[] values = { 11, 21, 5, 5, 31, 41 }; 
     List<Integer> list = createList(values); 
     System.out.println(list); 
     new ListRemove().remove(list, 5); 
     System.out.println(list); 
    } 

    private static List<Integer> createList(int[] values) { 
     List<Integer> list = new ArrayList<>(values.length); 

     for (int index = 0; index < values.length; index++) { 
      list.add(Integer.valueOf(values[index])); 
     } 

     return list; 
    } 

    public void remove(List<Integer> list, int value) { 
     for (int index = list.size() - 1; index >= 0; index--) { 
      if (list.get(index) == value) { 
       list.remove(index); 
      } 
     } 
    } 

} 
Verwandte Themen