调用remove方法后,我调用display,我得到一个空列表;但是,如果我首先调用显示方法,它将显示正确的列表,我猜测“第一个”值到达列表的末尾,或者我在某个地方有一个断开的节点。任何帮助表示赞赏
public class LinkedList {
private Node first;
public LinkedList()
{
first = null;
}
//add students to the list
public void add(Student s)
{
Node newNode = new Node(s);
newNode.next = first;
first = newNode;
}
//remove duplicate records (return true if duplicate found)
public boolean remove(String fn, String ln)
{
Student remove;
boolean found = false;
int duplicate = 0;
while(first != null)
{
if(first.value.getFname().equals(fn) && first.value.getLname().equals(ln))
{
duplicate++;
if(duplicate > 1)
{
remove = first.value;
found = true;
}
}
first = first.next;
}
if(found)
return found;
else
return found;
}
//display list of student
public void display()
{
if(first == null)
System.out.println("List is empty!");
else
{
while(first != null)
{
System.out.println(first.value);
first = first.next;
}
}
}
}
主
public class Tester {
public static void main(String[] args) {
UnderGrad john = new UnderGrad("john", "doe", 2.7, "computer Science", "phisics");
UnderGrad jorge = new UnderGrad("jorge", "vazquez", 3.8, "computer Science", "programming");
UnderGrad john2 = new UnderGrad("john", "doe", 3.0, "Computer Engineering", "phisics");
Advisor jim = new Advisor("jim", "smith");
Grad jane = new Grad("jane", "doe", 3.0, "Electric Engineering", jim);
LinkedList students = new LinkedList();
students.add(john);
students.add(jorge);
students.add(john2);
students.add(jane);
System.out.println(students.remove("john", "doe"));
students.display();
}
}
输出
run:
true
List is empty!
BUILD SUCCESSFUL (total time: 1 second)
答案 0 :(得分:3)
您正在使用链接列表的头部(first
)作为remove
方法中的迭代器。相反,使用局部变量:
for (Node current = first; current != null; current = current.next) {
if (current.value.getFname().equals(...
...
...
}
答案 1 :(得分:1)
你有一些错误。你不可能这意味着: 如果(发现) 返回发现; 其他 返回发现;
总是会回归真实。
设置断点,绘制数据结构图片(是铅笔),并在浏览代码时在调试器中查看数据结构。
如果您在此处获得代码答案,您将无法找到下一个分配。抱歉。
-Archibald教授。
答案 2 :(得分:1)
逐步执行代码并注意第一次调用first
后remove(...)
的值会发生什么变化。
提示:它将是null
。
由于LinkedList.first
是LinkedList
对其内容的唯一引用,因此在您致电remove()
后,该列表已“遗忘”其中包含的内容。
答案 3 :(得分:0)
问题出在你的add()方法中。看那边。 :)