在java中从此链接列表中查找和删除节点

时间:2016-03-26 01:41:58

标签: java

我必须编写一个实现学生链接列表的程序,在这种情况下,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; 
      }
}

1 个答案:

答案 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对象并检查它们是否相等。