2014-03-26 18 views
1

我有LinkedList與測試程序。正如你在該程序中看到的,我將一些學生添加到列表中。我可以刪除它們。如果我選擇s1,s2,s3 oraz s4來刪除一切運行良好,並且我的列表正確打印並且關於元素數量的信息是正確的。但是,如果我刪除最後一個元素(在這種情況下 - s5)有關元素數量的信息仍然正確,但是此元素仍然是打印的。爲什麼?我的錯誤在哪裏?LinkedList - 刪除(對象)方法奇怪 - 刪除最後一個元素無法正常工作

public class Lista implements List { 
private Element head = new Element(null); //wartownik 
private int size; 
public Lista(){ 
    clear(); 
} 

public void clear(){ 
    head.setNext(null); 
    size=0; 
} 

public void add(Object value){ 
    if (head.getNext()==null) head.setNext(new Element(value)); 
    else { 
     Element last = head.getNext(); 
     //wyszukiwanie ostatniego elementu 
    while(last.getNext() != null) 
     last=last.getNext(); 
    // i ustawianie jego referencji next na nowowstawiany Element 
    last.setNext(new Element(value));} 
    ++size; 
} 


public Object get(int index) throws IndexOutOfBoundsException{ 
    if(index<0 || index>size) throw new IndexOutOfBoundsException(); 
    Element particular = head.getNext(); 
    for(int i=0; i <= index; i++) 
     particular = particular.getNext(); 
    return particular.getValue(); 
} 

public boolean delete(Object o){ 
    if(head.getNext() == null) return false; 
    if(head.getNext().getValue().equals(o)){ 
     head.setNext(head.getNext().getNext()); 
     size--; 
     return true; 
    } 

    Element delete = head.getNext(); 
    while(delete != null && delete.getNext() != null){ 
     if(delete.getNext().getValue().equals(o)){ 
      delete.setNext(delete.getNext().getNext()); 
          size--; 
      return true; 
     } 
     delete = delete.getNext(); 
    } 
    return false; 
} 

public int size(){ 
    return size; 
} 

public boolean isEmpty(){ 
    return size == 0; 
} 

public IteratorListowy iterator() { 
    return new IteratorListowy(); 
} 

public void wyswietlListe() { 
    IteratorListowy iterator = iterator(); 
    for (iterator.first(); !iterator.isDone(); iterator.next()) 
    { 
     System.out.println(iterator.current()); 
    } 
    System.out.println(); 
} 

public void infoOStanie() { 
    if (isEmpty()) { 
     System.out.println("Lista pusta."); 
    } 
    else 
    { 
     System.out.println("Lista zawiera " + size() + " elementow."); 
    } 

} 

private static final class Element{ 
    private Object value; 
    private Element next; //Referencja do kolejnego obiektu 

    public Element(Object value){ 
     setValue(value); 
     } 

    public void setValue(Object value) { 
     this.value = value; 
    } 

    public Object getValue() { 
     return value; 
    } 

    //ustawia referencję this.next na obiekt next podany w atgumencie 
    public void setNext(Element next) { 
     if (next != null) 
     this.next = next; 
    } 

    public Element getNext(){ 
     return next; 
    } 

} 

private class IteratorListowy implements Iterator{ 
private Element current; 

public IteratorListowy() { 
    current = head; 
} 

public void next() { 
    current = current.next; 
} 
public boolean isDone() { 
    return current == null; 
} 
public Object current() { 
    return current.value; 
} 

public void first() { 
    current = head.getNext(); 
} 
} 
} 

測試

public class Program { 

public static void main(String[] args) { 
    Lista lista = new Lista(); 
    Iterator iterator = lista.iterator(); 
    Student s1 = new Student("Kowalski", 3523); 
    Student s2 = new Student("Polański", 45612); 
    Student s3 = new Student("Karzeł", 8795); 
    Student s4 = new Student("Pałka", 3218); 
    Student s5 = new Student("Konowałek", 8432); 
    Student s6 = new Student("Kłopotek", 6743); 
    Student s7 = new Student("Ciołek", 14124); 
    lista.add(s1); 
    lista.add(s2); 
    lista.add(s3); 
    lista.add(s4); 
    lista.add(s5); 
    lista.wyswietlListe(); 
    lista.delete(s5); 
    lista.wyswietlListe(); 


    lista.infoOStanie(); 

    lista.clear(); 
    lista.infoOStanie(); 

} 
} 

回答

0

的問題是,你的setNext(Element next)方法不設置任何東西,如果next == null。這就是你列表中最後一個元素的情況。

因此,當您撥打delete.setNext(delete.getNext().getNext());時,沒有任何設置,因爲delete.getNext().getNext()null

刪除中的if (next != null)條件,它將起作用。

+0

嗯......你有我:)謝謝。現在一切正常 – RIPI