【问题标题】:Whats wrong with my delete method in LinkedList (generic)?LinkedList(通用)中的删除方法有什么问题?
【发布时间】:2015-11-06 13:46:46
【问题描述】:

我改了 LinkedList 类,但还是不行

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;
   }
}

我无法找出我的 java 泛型类中删除方法的问题

public void delete(T 元素){

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.");
        }
    }

【问题讨论】:

  • 您可以从解释您遇到的问题开始。还请提供课程LinearNode的代码
  • 你说你有问题...这是什么?
  • 我无法从驱动程序类中删除对象。我还从我的 Driver 类和 LinearNode 类中添加了一些代码

标签: java class generics linked-list


【解决方案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);

【讨论】:

  • 谢谢你帮助了我,写了很多cmets。它们对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多