2015-11-06 47 views
0

我改变了LinkedList类,但它仍然无法正常工作LinkedList(generic)中的删除方法有什么问题?

LinearNode类

public class LinearNode<T>{ 


    private LinearNode<T> next; 
    private T element; 

    public LinearNode() 
    { 
     next = null; 
     element = null; 
    } 

    public LinearNode (T elem) 
    { 
     next = null; 
     element = elem; 
    } 

    public LinearNode<T> getNext() 
    { 
     return next; 
    } 
    public void setNext (LinearNode<T> node) 
    { 
     next = node; 
    } 

    public T getElement() 
    { 
     return element; 
    } 

    public void setElement (T elem) 
    { 
     element = elem; 
    } 
} 

我想不出用delete方法的问题在我的Java泛型类

public void delete(T element){

LinearNode<T> previous = list; 
LinearNode<T> current = list; 
boolean found = false; 

while (!found && current != null) 
{ 
    if (current.getElement().equals (element)) { 
     found = true; 
    } 
    else { 
     previous = current; 
     current = current.getNext(); 
    } 
} 
//found loop 
if (found)//we fount the element 
{ 

    if(current == this.list){ 
      previous.setNext (null); 
      this.last = previous; 
     } 

    else 
     if(current == this.last){ 
      this.last.setNext(null); 
      this.last.equals(previous.getElement()); 

     } 
     else{ 

      previous.setNext(current.getNext()); 
      current.setNext (null); 
     } 

this.count--; 
} 

}

我也有我的驱动程序类将从链表

也在此驱动程序类的部分删除元素

public void delete(){ 

     Teacher aTeacher; 
     Scanner scan = new Scanner(System.in); 
     String number; 
     aTeacher = new Teacher(); 

     System.out.println("Now you can delete teachers from the programme by their number."); 
     System.out.println("Please input number:"); 
     number = scan.nextLine(); 

     if (aTeacher.getNumber().equals(number)){ 
     teachers.delete(aTeacher); 
     } 
     else { 
      System.out.println("There are no any teacher with this number."); 
     } 
    } 
+0

你可以通过解释遇到何种问题开始。也请求提供类'LinearNode'的代码 – hotzst

+0

你说你有一个问题......哪一个是? –

+0

我无法从我的驱动程序类中删除对象。我还添加了一些来自我的Driver类和LinearNode类的代码 – Alex

回答

1

我可以看到几个问题你码。

这个循环是有点奇怪

while (current != null && !current.getElement().equals(element)) 
{ 
    previous = current; 
    current = current.getNext(); 
    found = true; 
} 

你不应该设置found = true在每次迭代循环内,因为这样你会永远相信你发现该元素的循环完成后。如果您传递您知道存在于列表中的值,那么您将不会注意到问题。如果您传递的值不在列表中,那么稍后您的代码中可能会看到current设置为null

我可能会这样写,而不是

while (! found && current != null) 
{ 
    if (current.getElement().equals (element)) { 
     found = true; 
    } 
    else { 
     previous = current; 
     current = current.getNext(); 
    } 
} 

此块是有点奇怪太

 if(current == this.last){ 
      this.last.setNext(null); 
      this.last.equals(previous.getElement()); 
     } 

无论这些说法看起来他们不会有什么影响。 last.getNext()的值应该已经是nullthis.last.equals(previous.getElement())只是测试最后一个节点是否等于在倒数第二个节点中保存的元素;该评估应始终是false,并希望没有副作用。

我可能会这样写,而不是

 if(current == this.last){ 
      previous.setNext (null); 
      this.last = previous; 
     } 

最后,虽然它不是删除本身一个问题,我仍然会彻底这里,并确保被删除不保留任何节点参考列表。

所以这

 previous.setNext(current.getNext()); 

可能成为这个

 previous.setNext(current.getNext()); 
     current.setNext (null); 
+0

谢谢你的帮助,并写了很多评论。他们会对我很有帮助。 – Alex

相关问题