我必须编写一个实现学生链接列表的程序,在这种情况下,Student是一个单独的类,将被调用。我的链接列表应该能够使用该学生的姓名找到学生,这是我的程序失败的区域,它似乎找不到该学生的节点,因此它也不会删除。我正在为一个课写这个,教授不允许使用内置的Linked List类。
这是我的代码
public class StudentList {
StudentNode head;
public StudentList() {
shead = null;
}
public void setShead(StudentNode data) {
shead = data;
}
public StudentNode getShead() {
return shead;
}
public void insert(StudentNode data) {
StudentNode iterator = head;
if (iterator == null) {
head = data;
} else {
while (iterator.getnext() != null) {
iterator = iterator.getnext();
}
iterator.setnext(data);
}
}
public void delete(StudentNode data) {
StudentNode iterator = head;
StudentNode current;
if (iterator == data) {
head = iterator.getnext();
} else {
while (iterator.getnext() != null) {
if (iterator.getnext().equals(data)) {
// current
iterator.setnext(iterator.getnext().getnext());
// current.setSptr(iterator.getnext());
break;
} else {
iterator = iterator.getSptr();
}
}
}
}
public StudentNode find(String n) {
StudentNode iterator = head;
StudentNode result = null;
while (iterator.getnext() != null) {
if (iterator.getStudent().getName().equals(n)) {
result = iterator;
System.out.println("" + iterator.getStudent().getName());
} else {
result = null;
}
iterator = iterator.getnext();
}
return result;
}
public void print(){
StudentNode iterator = head;
while(iterator != null){
JOptionPane.showMessageDialog(null,""+ iterator.getStudent().getName());
iterator = iterator.getnext();
}
}
}
这是节点
public class StudentNode{
private Student data;
private StudentNode next;
public StudentNode(){
data = null;
next = null;
}
public StudentNode(Student data){
this.data = data;
next = null;
}
public Student getStudent(){
return data;
}
public void setStudent(Student data){
this.data = data;
}
public StudentNode getnext(){
return next;
}
public void setnext(StudentNode next){
this.next = next;
}
}
答案 0 :(得分:0)
`if(iterator == data){` // <-- It just checks for same reference
head = iterator.getnext();
}
if(iterator.getnext().equals(data)){
//&lt; - 这里也是,因为你没有覆盖equals
方法..引用将被比较
另外,我没有看到你调用find
方法
您应该在StudentNode
中覆盖equals方法,您可以在其中比较Student
对象并检查它们是否相等。