我更改了 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)无效删除(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.");
}
}
最佳答案
我发现您的代码中存在一些问题。
这个循环有点奇怪
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();
}
}
这个 block 也有点奇怪
if(current == this.last){
this.last.setNext(null);
this.last.equals(previous.getElement());
}
这两种说法似乎都没有任何效果。 last.getNext ()
的值应该已经是 null
。 this.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);
关于java - LinkedList(通用)中的删除方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33568277/